2015-03-25 18 views
-1

Проблема, которую я пытаюсь решить: Моя программа использует System.Win.ScktComp.TServerSocket для связи с другим локальным процессом через Ethernet. Между получением пакета из локального процесса и отправкой ответа 100 мс - это не должно длиться так долго. Я пытаюсь выполнить мою программу с помощью отладчика, чтобы узнать, где расходуется это 100 мс.Как получить время процессора Delphi?

Проблема в том, что если я получу текущее время, пока я нахожусь в отладчике, он, очевидно, посчитает время, проведенное в приостановленном состоянии отладчика. Другая проблема заключается в том, что соответствующая часть моего приложения составляет TTimer и управляется событиями, так что, когда процедура возвращается, вы не знаете, какая процедура будет вызвана далее.

Моей попытки: я могу отказаться от использования отладчика и print текущего времени везде, как в все в OnTimer процедурах и другие мероприятия.

Гораздо лучшее решение: Шаг через с помощью отладчика, получить время центрального процессора (который не влияет на время, потраченное остановился в отладчике) здесь и там, чтобы определить, где что 100мс теряется.

+2

Нет, пытаясь приурочить свое приложение, пока он отлаживается, не даст значимых результатов. Инструмент это с профилировщиком или некоторым кодом регистрации. –

+1

Я бы попробовал procmon. Запустите Procmon, запустите приложение, сделайте свою работу, остановите procmon, откройте Tools -> Stack Summary и развернитесь в своем приложении. * (Включить расширенный вывод в меню «Фильтр») * Если этого недостаточно, вы можете использовать [WPA] (https://www.google.be/search?hl=nl&q=defrag+tools+wpa&sourceid=ie8&rls=com. microsoft: nl-BE: IE-Address & ie = & oe = & gws_rd = ssl) * (хотя и с более крутой кривой обучения) * –

+0

@DavidHeffernan Почему это не может быть сделано? В Python я могу остановиться в точке останова, распечатать время процессора с помощью 'clock()' (он использует C stdlib 'clock()') и время, которое он печатает **, не ** учитывает время, которое оно потратило приостановлено в отладчике. @Ливен спасибо за ваше предложение; не знал, что вы можете использовать Procmon для этого. – DBedrenko

ответ

5

Я не верю, что вы решаете свою проблему правильным образом и сделали это в комментариях. Оставляя это в стороне, функция, которую вы запрашиваете, - GetProcessTimes.

1

Я пытаюсь ... видеть, где расходуется это 100 мс.

Отладчик не сможет сказать вам это очень легко. Вам нужно использовать профилировщик, например AQTime или аналогичный, и позволить ему синхронизировать ваш код в режиме реального времени и сообщать о результатах, например, сколько времени было потрачено на определенные функции и методы класса.

Смежные вопросы