![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| v00d00 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 28.12.2005 Репутация: нет Всего: нет |
Одинаковый (почти, с учетом портирования) код скомпилированный на D7 и D2010 выполняется с разной скоростью.
Имеется сложная структура классов с частым вызовом виртаульных функций. Тормоза замеченны в отдельной BPL, в ней происходит интенсиваная работа со строками. Доходит до того, что одни и теже последовательности вызовов могут выполняться до 10 раз дольше. Еще немного подробностей. Профайлер для кода на д7 показывает что идет вызов метода Merge#1 т.е. вызывается первая перегрузка в юните. Для D2010 вызывается Merge#3. Приблуды компилятора? Как думаете, можно ли решить проблему настройкой компилятора? Были ли у кого-нибудь такого рода проблемы при миграции? Хех, сфейлил в названии темы. Это сообщение отредактировал(а) v00d00 - 9.3.2010, 18:02 |
|||
|
||||
| Matematik |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1027 Регистрация: 11.3.2006 Репутация: 17 Всего: 50 |
Первое что приходит наум:
1. оптимизация кода работы со строками например, не делать так
2. работа с UnicodeString медленне чем с AnsiString 3. в Release версии отключить "Range checking" .. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
Очень бы хотелось чтобы это работало быстро. Это же уже автоматически пишется. Вроде менеждер памяти с запасом выделяет... Может у ТС много неявных конвертаций уникод-анси-уникод? -------------------- Обижено школьников: 8 |
|||
|
||||
| v00d00 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 28.12.2005 Репутация: нет Всего: нет |
Старобамп
Выяснилось что львиная доля замедления была связана с багом, из-за которго одна и та же операция выполнялась 10 раз, на его фиксе мы выиграли 500 мс. Но на этом наши изыскания не закончились. Так сложилось, что 90 процентов процессорного времени съедают Locata и Lookup вызовы. И видимо в силу кривости нашей программы, не редко случается ситуация когда Locate вызывается для записи на которой уже стоит курсор в данный момент. Самое интересное, что нехитрой манипуляцией, с перегрузкой метода удалось на 25% ускорить работу системы в целом. Вот код.
Я хлеб, и поэтому наверняка эту логику можно ускорить еще немного. Счет идет на микросекунды, т.к. за время загрузки документа вызвается порядка 5000 лукап-локейтов... Если есть идеи по ускорению, прошу подскажите. |
|||
|
||||
![]()
|
| Правила форума "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. |