![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
VictorGr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 27.10.2006 Репутация: нет Всего: нет |
Имею таймер,
который раз в секунду работает с WinAPI, HWND, ProcessID и проч. Использует переменные. Подумал: а насколько быстра инициализация переменных? Ведь по сути у меня каждую секунду создаются переменные, с ними идёт работа, затем они уничтожаются. А если их вынести наружу? В область модуля? Их инициализация не будет происходить? А если внутри функции использовать Static переменные? Или вообще потери скорости настолько незначительные, что можно на них не обращать внимание? Спасибо! |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 3 Всего: 121 |
Ну видел бы ты во что компилятор VB превращает элементарные операции, это ужас. Конечно здесь куча лишних "телодвижений", лучше вынеси. Прироста в скорости может и не ощутишь, но мне бы было приятней
![]() -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20580 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
По сравнению с тем количеством тиков, которое потребуется, чтобы добраться до кода создания и инициализации переменной, сама эта процедура - сущие пустяки. Посему, если быстродействие критично, гораздо разумнее использовать переменные уровня модуля или даже уровня проекта. Однако следует строго следить за дублированием имен, потому как поиск таких "блох" - это сущий кошмар, особенно в асинхронных процедурах. Статические переменные по скорости работы с ними ничем не отличаются от переменных уровня модуля - просто у них область видимости поуже. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
JusTalionis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 576 Регистрация: 11.7.2006 Репутация: 6 Всего: 17 |
Раз в секунду - это абсолютно незаметное замедление при ЛЮБОЙ инициализации (исключая ожидание ответа устройств, конечно). Ты же не на 486 работаешь?..
По моим наблюдениям, скорости выполнения процедур приходится оптимизировать, если тебе требуются частоты выше 400 герц, или вычисления вставлены внутрь цикла. (Например, у меня были траблы с созданием анимации, когда требуется быстро перерисовывать картинку, и лишние задержки отражаются на равномерности. И то, здесь больше сказывается сама работа Виндовс, чем построение VB-кода) |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 3 Всего: 121 |
Ну если бы был виноват виндовс, то тормозило бы везде. Ты ещё не исключил один источник тормозов: реализацию алгоритма. Ещё, может ты под p-code компилировал. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
VictorGr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 27.10.2006 Репутация: нет Всего: нет |
JusTalionis, я бы с удовольствием и каждый 100 мс. включал таймер, да только процесс при этом грузит проц на 20%.
Ежесекундная проверка -- на 1-4%. Конечно, постараюсь ещё оптимизировать алгоритм. И обратил внимание на инициализацию переменных как на один из способов уменьшить задержки. |
|||
|
||||
JusTalionis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 576 Регистрация: 11.7.2006 Репутация: 6 Всего: 17 |
А везде и тормозило. Я разные реализации попробовал - примерно одинаково, ну - на границе ощутимости разница.
Да, под P. А как иначе в VB? Если есть дельный совет - прошу ответ в мою тему "Анимация средствами VB", не будем засорять тему Victorа посторонними обсуждениями. |
|||
|
||||
JusTalionis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 576 Регистрация: 11.7.2006 Репутация: 6 Всего: 17 |
||||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20580 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
Неверно, скорость доступа к существующей переменной практически не зависит от того, когда и где она была объявлена и проинициализирована. не для VB - тут нет регистровых переменных, все переменные ссылочные. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Tectoder |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 202 Регистрация: 13.3.2007 Репутация: нет Всего: 8 |
Вобщем, попытаюсь вкратце изложить свое менние.
Инициализация всех локальных переменных в процедуре это буквально две очень простые операции 1)измененеие одного регистра, время на эту оперцию никак не зависит от числа пременных 2) обнуление непрерывной области памяти(эта операция по времени пропорциональна суммарной длине переменных, однако по сути она ничтожна) Если переменные объявлены as new... то процедура инициализации такая же. Но при первом обращении происходит еще и создание объекта, про это то же не надо забывать. Сама работа с локальными и глобальными переменными почти идентична. Разницы в скорости mov [imm] и mov [r-imm] почти нет. Если только речь идет не о apartment-модели com-сервера. Если же модель такая, то работа с локальными переменными намного быстрее. Раз в секунду это вообще мелочь, если как вроде бы было замечено ты не ждешь ответа от флоппика. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "VB6" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB6 | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |