Счетчики производительности и ETW - это разные технологии. Счетчики производительности не выставляются через ETW.
Основное отличие: счетчики производительности предоставляют высокоуровневые показатели поведения системы (например, считывание таймеров и байтов и выделение объектов), в то время как ETW является средством диагностики и отслеживания (например, сообщения Debug.WriteLine
, но более насыщенные и структурированные).
В настоящее время как ETW, так и счетчики производительности имеют полную поддержку от Windows, и, как разработчик, вы можете написать код для получения и потребления данных для обеих технологий.
Счетчики производительности
Счетчики производительности , также известные как счетчики PDH (Performance Data Helper), представляют собой простые числовые метрики, которые дают вам общее представление о поведении конкретной системы. Например, % Processor Time
- это счетчик производительности, который сообщает вам, сколько процессорного времени используется для выполнения кода пользовательского режима. В качестве более сложного примера, # of Methods Jitted
в категории .NET CLR Jit
сообщает, сколько методов .NET было скомпилировано JIT с момента запуска приложения.
Счетчики производительности обычно используются для мониторинга работоспособности системы и диагностики определенных проблем с производительностью. Они являются хорошим индикатором проблем, когда что-то идет не так, как надо, но они не дают вам подробных сведений о том, почему происходит конкретная проблема.
Чтобы просмотреть счетчики производительности Windows, вы можете просто запустить perfmon
. В Vista + вам может потребоваться щелкнуть узел «Performance Monitor», чтобы увидеть диаграмму счетчиков. Чтобы программно получить доступ к счетчикам производительности, посмотрите класс System.Diagnostics.PerformanceCounter
в .NET или библиотеку PDH для собственного кода.
Трассировка событий для Windows (ETW)
ETW - это система трассировки, встроенная в Windows. По сути, любой компонент (например, пользовательское приложение или даже само ядро Windows) может отправлять диагностическую трассировочную информацию о конкретных событиях, которые происходят, о которых заботится компонент. Например, ядро отправляет события ETW, когда процесс запускается и останавливается, когда изображение (например, DLL) загружается и выгружается, когда поток создается или уничтожается, или даже когда поток выполняет переключение контекста. Зарегистрированные данные представлены в сериализованном формате, который описывается компонентом в другом месте, что позволяет диагностическим инструментам читать и понимать события ETW, записанные во время сеанса. См. здесь , где приведена прямоугольная диаграмма того, как все работает вместе.
ETW предназначен для быстрой работы и не должен оказывать существенного влияния на производительность системы, когда ведение журнала не включено. Начиная с Vista, ETW широко распространен в Windows и предназначен для использования разработчиками приложений (то есть, в частности, ваше приложение может быть провайдером ETW, который регистрирует события). ETW является основой для журнала событий и может использоваться профилировщиками производительности, отладчиками или системными мониторами.
См. Мой другой SO-пост здесь , где приведены некоторые ресурсы по взаимодействию с ETW.