Просмотр данных о событиях с помощью XPerf?

Я экспериментирую с использованием XPerf для инструментария приложения для анализа производительности. Моя цель — регистрировать события запуска/остановки в моем приложении C# и анализировать определенные метрики ядра между этими событиями.

Я создаю TraceListener и TraceSource в своем приложении и регистрирую события в источнике. Затем я использую logman для запуска двух сеансов: один для захвата событий от моего провайдера, а другой для захвата событий ядра (xperf -on DiagEasy). В конце сеанса я использую XPerf для объединения этих файлов и просмотра/наложения графиков. Все это хорошо работает.

События моего приложения отображаются на диаграмме «Общие события», однако события не имеют идентифицирующей информации (без имени, без данных о событии), поэтому трудно определить, какое событие является каким. Я знаю, что данные о моем событии захвачены, потому что они появляются в файле dumpfile.xml, когда я запускаю tracerpt в выводе трассировки. Есть ли способ прикрепить имена событий или данные о событиях к «Общим событиям» в XPerf? Является ли мой подход к использованию XPerf неправильным?

Вот пример кода, демонстрирующий, как я использую ETW:

static Guid providerId = new Guid("{4A9FD4F3-032B-4733-8455-03BC71ECEFB0}");
static void Main(string[] args)
{
    EventProviderTraceListener listener =
        new EventProviderTraceListener(providerId.ToString());
    TraceSource source = new TraceSource("ProductRepository", SourceLevels.All);
    source.Listeners.Add(listener);

    int id = 12;
    source.TraceData(TraceEventType.Warning, 12, "Some sample data");
    source.TraceEvent(TraceEventType.Start, 1, "TraceEvent.Start({0})", id);
    source.TraceEvent(TraceEventType.Stop, 1, "TraceEvent.Stop({0})", id);
    source.TraceInformation("TraceInformation");
}

person simonhaines    schedule 31.08.2012    source источник
comment
Вы зарегистрировали свой GUID? проверьте поставщиков запросов logman команды, чтобы узнать, был ли зарегистрирован GUID   -  person Venus    schedule 27.11.2012


Ответы (2)


Используйте новый класс System.Diagnostics.Tracing.EventSource из .net 4.5. Вэнс создал демонстрацию, как его использовать:

Вводное руководство. Регистрация событий ETW в C#: System.Diagnostics.Tracing.EventSource http://blogs.msdn.com/b/vancem/archive/2012/07/09/ведениежурнала-ваших-собственных-etw-событий-в-c-системной-диагностике-трассировки-источника-событий.aspx

person magicandre1981    schedule 03.12.2012
comment
Я посмотрю на это. Спасибо. - person simonhaines; 13.12.2012

Как user31273 упоминает, ключом для XPerf, чтобы понять полезную нагрузку вашего события, является регистрация манифеста вашего провайдера. Я не видел видео, на которое ссылается magicandre1981, но могу поспорить, что Вэнс упоминает, как зарегистрировать вашего провайдера С#. Не забудьте указать правильные коды операций (старт/стоп), чтобы получить то, что вы хотите.

person randseq    schedule 06.01.2013