Отслеживание времени выполнения в худшем случае
У меня есть кусок кода (.NET4 C#), который должен работать в тесном цикле - другие потоки асинхронно подают информацию в поток с помощью этого цикла и обрабатывают его команды. Код в среднем достаточно быстрый (100 - 200 микросекунд), но примерно раз в 2 секунды это занимает больше времени, обычно около 15 мс.
Эти пики не сильно изменяют среднее значение, но я хотел бы выяснить, в каких частях кода они встречаются - меня не интересует среднее значение, а скорее время выполнения в худшем случае. Есть ли инструменты для сбора такой информации? Я пробовал dotTrace, но безуспешно, он показывает только среднее значение, и я хотел бы игнорировать большинство случаев.
Всегда есть возможность написать свои собственные профилировщики, используя секундомер и т. Д., Но развертывание их по всему коду довольно неуклюже.
Примечание: я знаю, что следует ожидать некоторых переключателей контекста, вызывающих эти пики с занятым циклом, но код запускается на 24-ядерном сервере, выделенном для этого приложения. Поэтому я надеюсь, что смогу как-то свести их к минимуму.
1 ответ
Вы тоже пробовали ANTS? Ссылка: http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/ Цифры, которые он вам дает, усредняются по выбранному региону. Однако, когда вы выбираете трассировку стека, зеленые полосы, показанные в верхней части представления для временной шкалы, показывают, где было выполнено это представление стека; так что вы можете щелкнуть по каждой из них и просмотреть цифры (время и т. д.) для каждого исполнения стека. Это требует немного ручного сравнения, но это возможно.
Не уверен, что у пробного профилировщика есть что-то похожее, YourKits также является другим популярным профилировщиком, опять же, я не знаю, предлагает ли он что-то подобное