Отслеживание времени выполнения в худшем случае

У меня есть кусок кода (.NET4 C#), который должен работать в тесном цикле - другие потоки асинхронно подают информацию в поток с помощью этого цикла и обрабатывают его команды. Код в среднем достаточно быстрый (100 - 200 микросекунд), но примерно раз в 2 секунды это занимает больше времени, обычно около 15 мс.

Эти пики не сильно изменяют среднее значение, но я хотел бы выяснить, в каких частях кода они встречаются - меня не интересует среднее значение, а скорее время выполнения в худшем случае. Есть ли инструменты для сбора такой информации? Я пробовал dotTrace, но безуспешно, он показывает только среднее значение, и я хотел бы игнорировать большинство случаев.

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

Примечание: я знаю, что следует ожидать некоторых переключателей контекста, вызывающих эти пики с занятым циклом, но код запускается на 24-ядерном сервере, выделенном для этого приложения. Поэтому я надеюсь, что смогу как-то свести их к минимуму.

1 ответ

Решение

Вы тоже пробовали ANTS? Ссылка: http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/ Цифры, которые он вам дает, усредняются по выбранному региону. Однако, когда вы выбираете трассировку стека, зеленые полосы, показанные в верхней части представления для временной шкалы, показывают, где было выполнено это представление стека; так что вы можете щелкнуть по каждой из них и просмотреть цифры (время и т. д.) для каждого исполнения стека. Это требует немного ручного сравнения, но это возможно.

Не уверен, что у пробного профилировщика есть что-то похожее, YourKits также является другим популярным профилировщиком, опять же, я не знаю, предлагает ли он что-то подобное

Другие вопросы по тегам