2013-01-19 41 views
14

我想使用EventSource来启动ETW事件并使用Windows性能分析器查看它们。如何使用Windows性能分析器查看由EventSource创建的ETW事件?

我有一个基本的EventSource

[EventSource(Name = "BasicEventSource")] 
public class ETWLogger : EventSource 
{ 
#if DEBUG 
    private const bool ThrowOnError = true; 
#else 
    private const bool ThrowOnError = false; 
#endif 

    private ETWLogger(bool throwOnError) : base(throwOnError) { } 

    private static ETWLogger _log; 
    public static ETWLogger Log 
    { get { return _log ?? (_log = new ETWLogger(ThrowOnError)); } } 

    private static class Keywords 
    { 
     public const EventKeywords Perf = (EventKeywords) 1; 
    } 

    [Event(1, Keywords = Keywords.Perf, Level = EventLevel.Informational)] 
    public void Startup() { WriteEvent(1, "StartUp"); } 
} 

当我与Windows性能记录器(WPR)记录,我没有看到我的供应商或事件在Windows性能分析器(WPA)的一般事件图表。

感谢您的时间:)

+0

你是怎么开始你的会议?这是我们一直在使用的方法 - http://svcperf.codeplex.com/wikipage?title=Realtime%2bWCF%2bSession&referringTitle=常见问题解答 – Sajay

回答

1

WPR不知道任何关于您的自定义EventSource,所以你必须创建一个录音配置文件,以便您可以启用它。 WPT附带了一些样例配置文件,这些配置文件可以帮助您开始使用。

8.1版本的WPR支持与PerfView相同的命名约定,这意味着您可以在配置文件中使用*YourEventSource而不是GUID。

根据我的经验,8.1版WPA中不支持EventSource的一些功能。例如。如果你使用任务,他们将无法正确显示。但是,当为您的EventSource创建记录配置文件时,EventSource的基本用法适用于WPA/WPR的8.1版本。

另一种选择是使用PerfView收集跟踪并使用WPA进行分析(如果您更喜欢通过PerfView)。

+0

我创建了一个配置文件,并使用WPR记录事件。事情看起来和我在PerfView中打开.etl文件时所期待的一样。但是,当我在WPA中打开.etl文件时,我看到了一个事件源名称和数字的引用,而不是我的事件名称。这是预期的吗? – JonDrnek

1

看看这个demo tutorial。另外一个演示可以发现here,从00:38:39开始。

1

WPR和WPA不支持EventSource,但是使用新的8.1ADK。见here

+0

Vance在这里发布了PerfView的自定义版本(http://sdrv.ms/QnHpd4)可以收集EventSource事件,然后可以在WPA中查看这些事件。我怀疑最近发布的1.5版本的PerfView也支持这一点。 http://blogs.msdn.com/b/vancem/archive/2013/12/09/perfview-version-1-5-has-been-released.aspx –

相关问题