Страница: 1 | 2 |
Вопрос: Время выполнения кода
Добавлено: 04.03.11 13:35
Автор вопроса: ЛеШий
Добрый день!
Столкнулся со следующей проблемой: на ноутбуке (VS2010Pro VB) написал DLL для сбора информации из сторонней программы. На моем ноуте этот процесс выполняется около одной секунды. Переношу эту DLL на другой компьютер и запускаю - время выполнения того же кода более минуты, т.е. в 60 раз медленнее. Проверил на третьей машине - опять около минуты.
Машина 1 (время выполнения 1-3 сек.)
Win7 x64
Intel i7
4 Gb RAM
Машина 2 (время выполнения около 1 мин.)
Vista x64
Intel core 2 Duo
4 Gb Ram
Машина 3 (время выполнения около 1 мин.)
Win7 x64
Intel i5
8 Gb RAM
Программа, из которой высасывал данные, везде одинаковая (x64).
В чем может быть проблема? Из-за чего такая большая разница?
Ответы
Всего ответов: 16
Номер ответа: 1
Автор ответа:
Alex
Вопросов: 7
Ответов: 73
Профиль | | #1
Добавлено: 04.03.11 13:45
Попробуй запусить ДЛЛ-ку пару раз на 2-й и 3-й машине, а не один раз, скорее-всего при первом запуске идет "компиляция под текущую машину"
Номер ответа: 2
Автор ответа:
Alex
Вопросов: 7
Ответов: 73
Профиль | | #2
Добавлено: 04.03.11 13:47
Короче последующие разы ДЛЛ-ка должна быстрее отрабатывать
Номер ответа: 3
Автор ответа:
ЛеШий
Вопросов: 21
Ответов: 41
Профиль | | #3
Добавлено: 04.03.11 14:00
DLL запускалась несколько раз на каждой машине. Если последующие разы и были быстрее, то не заметно.
Номер ответа: 4
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #4
Добавлено: 04.03.11 14:07
Попробуй запусить ДЛЛ-ку пару раз на 2-й и 3-й машине, а не один раз, скорее-всего при первом запуске идет "компиляция под текущую машину"
1) JIT компиляция длиной в минуту?
2) JIT компиляция выполняется не при первом запуске, а при каждом.
Номер ответа: 5
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #5
Добавлено: 04.03.11 14:09
Я так понимаю открылся 5-й сезон битвы экстрасенсов? Найти причину тормозов, зная только время выполнения программы в разных условиях, и названия процессоров (причем без указания моделей)?
Номер ответа: 6
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #6
Добавлено: 04.03.11 14:15
Я тогда рискну.
1) Идет обработка 2-х мерных массивов в неправильном порядке (перепутаны местами внешний и внутренний циклы, из-за чего очень неэффективно используется кеш-память. Поскольку в Core i7 12 мб кеш-памяти, в созданых условиях кеш-промахи происходят очень редко или даже вообще не происходят, в Core i5 и Core 2 Duo кеш-памяти в разы меньше, поэтому кеш не работает, в результате имеем катастрофическое падение производительности (хотя, возможно, не в 60 раз...)
2) При запуске не на dev машине запуск выполняется не из-под администратора, в результате постоянно падают какие-то SecurityException'ы, которые гасятся пустым блоком catch и их не видно, но на это тратится много времени.
Номер ответа: 7
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #7
Добавлено: 04.03.11 15:16
неплохой удар
Номер ответа: 8
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #8
Добавлено: 04.03.11 16:43
Ога, мне б так уметь (серьёзно).
Номер ответа: 9
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #9
Добавлено: 04.03.11 21:17
подымай свой джедайский скилл
Номер ответа: 10
Автор ответа:
ЛеШий
Вопросов: 21
Ответов: 41
Профиль | | #10
Добавлено: 04.03.11 22:24
Очень похоже на правду
Везде от имени администратора.
Спасибо за подсказку, буду искать второй i7, чтобы проверить.
Номер ответа: 11
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #11
Добавлено: 05.03.11 00:01
.oO(не легче циклы местами поменять?)
Номер ответа: 12
Автор ответа:
ЛеШий
Вопросов: 21
Ответов: 41
Профиль | | #12
Добавлено: 05.03.11 09:46
Нет не легче, ибо двухмерных массивов у меня нет, а есть одномерные вложенные. Неэффективное использование памяти очень вероятно, но способов изменить структуру массивов я пока не вижу.
Номер ответа: 13
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #13
Добавлено: 05.03.11 09:55
а ты покажи, мож другие то и улгядят
Номер ответа: 14
Автор ответа:
ЛеШий
Вопросов: 21
Ответов: 41
Профиль | | #14
Добавлено: 09.03.11 22:01
Эти циклы у меня занимают больше 200 строк и несколько классов. Ну и немного коммерческая тайна
Буду колдовать, если выясню причину - напишу.
Номер ответа: 15
Автор ответа:
СанСаныч
Вопросов: 3
Ответов: 118
Профиль | | #15
Добавлено: 10.03.11 13:32
Эти циклы у меня занимают больше 200 строк и несколько классов
Круто. Более чем уверен, что это чудо можно сократить раз в 5 ))))). Если ты, конечно, не игрушку пишешь.