![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| chip_and_dayl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 603 Регистрация: 22.4.2007 Где: Украина, Киев Репутация: 1 Всего: 9 |
Всем привет.
В коде есть следующее ветвление ifов
Так как этот код вызывается очень часто, то затормаживается работа программы. Как можно это ускорить/оптимизировать? Это сообщение отредактировал(а) chip_and_dayl - 3.8.2012, 12:51 -------------------- Фсё будет хорошо!!! |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
все должны угадать, что там живёт в Create?
Добавлено через 54 секунды Если код вызывается очень часто, то создай всё один раз, но не показывай. В нужный момент просто показывай/прячь. |
|||
|
||||
| chip_and_dayl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 603 Регистрация: 22.4.2007 Где: Украина, Киев Репутация: 1 Всего: 9 |
Проблема именно в if, поэтому в креейт смотреть не нужно. Вызывается очень часть, каждые 10 секунд и может вызваться от 1 до 200 за каждый вызов. Создать один раз не могу Добавлено через 8 минут и 54 секунды result: TfrmAbstractFrameCard Соответственно все объекты которые создаются, есть наследники TfrmAbstractFrameCard -------------------- Фсё будет хорошо!!! |
|||
|
||||
| XperT |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 269 Регистрация: 19.8.2006 Репутация: 2 Всего: 4 |
Проблема не в if, он не может тормозить программу больше, чем создание формы, но если так сильно хочется его заменить на что-то более быстрое, то рекомендую посмотреть в сторону этой функции:
|
|||
|
||||
| Qu1nt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 13.1.2007 Репутация: 18 Всего: 50 |
||||
|
||||
| XperT |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 269 Регистрация: 19.8.2006 Репутация: 2 Всего: 4 |
Так же, если у вас все формы имею одного наследника, то можно посмотреть в сторону TDictionary
Это сообщение отредактировал(а) XperT - 3.8.2012, 13:31 |
|||
|
||||
| DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 2 Всего: 19 |
Пробежавшись по коду могу предложить такой вариант оптимизации:
1. Регистрируете классы при запуске программы(REgisterClass) 2. При вызове функции делаете всего лишь FindClass, далее приводите к требуемому базовому классу и выполняете Create Собственно пример -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." |
|||
|
||||
| northener |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
А смысл? Там тот же банальный перебор:
-------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
||||
|
|||||
| XperT |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 269 Регистрация: 19.8.2006 Репутация: 2 Всего: 4 |
Посыпаю голову пеплом, но я больше чем уверен, что заменив ифы на что-то более оптимальное автор не добьется увеличение скорости, потому что явно проблема в другом. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
походу там просто очень много if и тормозит именно линейный просмотр
ТСу нужен выбор более эффективный, чем O(n) альтернативы - дерево O(log(n)) и хеш-таблица O(1) TDictionary<keyT,valueT>, как я понимаю, хэш и есть
наверно даже если не имеют: в качестве valueT можно взять структуру из указателя на член-функцию и самого объекта, TMethod см. http://forum.vingrad.ru/topic-21991.html |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
codeView откуда?
Можно сдеалать одну процедуру которая принимает класс формы (а не имя класса) и создает ее как Application.CreateForm Можно еще GoF Порождающие шаблоны проектирования полистать. -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
проблема не в сокращении кода или изяществе, а в трудоемкости выбора. возможно, значительная переделка проекта позволит вообще избежать этого узкого места, но по умолчанию предполагается, что ТС не дурак и ему нужен ответ на его вопрос, а не констатация убогости его решения. |
|||
|
||||
| northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: 8 Всего: 20 |
Хм. Представьте реальный проект с таким узким местом и я с вами соглашусь -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
||||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
Неизвестно откуда приходит эта строка, и есть ли возможность заменить строку с именем класса заменить на класс. -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| Чучмек |
|
|||
|
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 14 Всего: 41 |
Ну вот можно сделать по аналогии
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |