使用XPerf查看事件数据?

时间:2012-08-31 02:46:57

标签: c# etw xperf

我尝试使用XPerf来检测应用程序的性能分析。我的目标是在我的C#应用​​程序中记录启动/停止事件,并分析这些事件之间的某些内核指标。

我正在我的应用程序中创建TraceListenerTraceSource并将事件记录到源。然后我使用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");
}

2 个答案:

答案 0 :(得分:1)

使用.net 4.5中新的System.Diagnostics.Tracing.EventSource类。 Vance创建了一个演示如何使用它:

简介教程:在C#中记录ETW事件:System.Diagnostics.Tracing.EventSource http://blogs.msdn.com/b/vancem/archive/2012/07/09/logging-your-own-etw-events-in-c-system-diagnostics-tracing-eventsource.aspx

答案 1 :(得分:1)

由于user31273提到XPerf了解事件有效负载的关键是注册提供者的清单。我没有看到magicandre1981链接的视频,但我打赌Vance提到如何注册你的C#提供商。记住指定正确的操作码(开始/停止)以获得你想要的东西。