| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > D2010 code to slow |
| Автор: v00d00 9.3.2010, 17:59 |
| Одинаковый (почти, с учетом портирования) код скомпилированный на D7 и D2010 выполняется с разной скоростью. Имеется сложная структура классов с частым вызовом виртаульных функций. Тормоза замеченны в отдельной BPL, в ней происходит интенсиваная работа со строками. Доходит до того, что одни и теже последовательности вызовов могут выполняться до 10 раз дольше. Еще немного подробностей. Профайлер для кода на д7 показывает что идет вызов метода Merge#1 т.е. вызывается первая перегрузка в юните. Для D2010 вызывается Merge#3. Приблуды компилятора? Как думаете, можно ли решить проблему настройкой компилятора? Были ли у кого-нибудь такого рода проблемы при миграции? Хех, сфейлил в названии темы. |
| Автор: Matematik 9.3.2010, 18:34 | ||
| Первое что приходит наум: 1. оптимизация кода работы со строками например, не делать так
2. работа с UnicodeString медленне чем с AnsiString 3. в Release версии отключить "Range checking" .. |
| Автор: v00d00 23.3.2010, 10:57 | ||
| Старобамп Выяснилось что львиная доля замедления была связана с багом, из-за которго одна и та же операция выполнялась 10 раз, на его фиксе мы выиграли 500 мс. Но на этом наши изыскания не закончились. Так сложилось, что 90 процентов процессорного времени съедают Locata и Lookup вызовы. И видимо в силу кривости нашей программы, не редко случается ситуация когда Locate вызывается для записи на которой уже стоит курсор в данный момент. Самое интересное, что нехитрой манипуляцией, с перегрузкой метода удалось на 25% ускорить работу системы в целом. Вот код.
Я хлеб, и поэтому наверняка эту логику можно ускорить еще немного. Счет идет на микросекунды, т.к. за время загрузки документа вызвается порядка 5000 лукап-локейтов... Если есть идеи по ускорению, прошу подскажите. |