Как работают профилировщики .NET?
Я подумываю о добавлении сборки режима диагностики в приложение, которое я пишу, чтобы подсчитать использование метода и время выполнения, аналогично тому, что делают многие профайлы кода, такие как dotTrace.
У меня возникли проблемы с поиском ресурсов через google о том, как это сделать; очевидно, это возможно, но может ли кто-нибудь указать мне некоторые ресурсы на то, как я могу реализовать что-то вроде подсчета вызовов метода в .NET?
Ответы
Ответ 1
Статья проекта кода Создание пользовательского .NET Profiler описывает процесс создания профилировщика с использованием перехватчиков профилей CLR.
Это предполагает создание COM-объекта, реализующего интерфейс ICorProfilerCallback2
, а затем использование переменных среды для указания CLR, который мы хотим профилировать с помощью этого класса:
Когда среда CLR начинает процесс, она ищет две переменные среды:
-
COR_ENABLE_PROFILING
: Эта переменная среды имеет значение 1 или 0. 1 указывает, что в CLR должен использоваться профилировщик. 0 (или отсутствие этой переменной среды) указывает, что он не должен использовать профилировщик. -
COR_PROFILER
: Теперь, когда мы сказали CLR, что мы хотим профилировать, мы должны сказать, какой профилировщик использовать. Поскольку профилировщики реализованы как COM-объекты, эта переменная среды будет установлена на GUID компонента, реализующего интерфейс ICorProfilerCallback2
.
Ответ 2
Возможно, я слишком прост здесь, но мое решение для этого было бы протоколированием. Использование сообщений уровня сообщения entlib или log4net и журнала. Затем вы можете просто написать небольшую программу script/для анализа файла журнала и дать вам счет метода. Там могут быть и другие инструменты диагностики журнала.
Если вам не нужна богатая визуализация или сопоставление сложных отношений в реальном времени и т.д. Вам нужен профайлер? Для количества методов и времени выполнения недостаточно ли файла журнала? После того, как вы на производстве или не заботитесь о приборостроении, вы повышаете уровень ведения журнала и забываете об этих сообщениях отладки.