System.Diagnostics.Tracing.EventSource vs System.Diagnostics.Trace

时间:2017-04-20 06:14:24

标签: c# etw

我不确定我是否理解使用System.Diagnostics.Tracing和使用System.Diagnostics.Trace的ETW之间的主要区别。我理解,使用它们我可以将事件转储到某些输出流,并且我可以使用各种侦听器来拦截这些数据 - 包括自定义侦听器。

但除了ETW的基础设施嵌入Windows并且我可以开箱即用WPR和PerfView这一事实外,我看不出有什么区别。

我何时会选择其中一个?

1 个答案:

答案 0 :(得分:2)

System.Diagnostics.TracingTrace更完整:

  • 事件由事件源隔离,这意味着您不必订阅所有事件(有利于提高性能)
  • 在源内部,事件按名称和" EventLevel"分隔,这意味着您可以过滤更多
  • 事件是结构化的(它们不仅仅是一个字符串,它们还可以提供有效负载以提供更多信息)

另一方面,System.Diagnostic.Trace是一个简单的记录器:您只能记录字符串,并且不能应用任何类型的过滤(它可以为所有消息启用,也可以对所有消息禁用)。但它的优点是Visual Studio调试器默认支持(因此当您附加到进程时,您可以直接在输出窗口中看到跟踪事件)。

我补充一点,提供开箱即用的ETW监听器是System.Diagnostics.Tracing的好处,但从技术上讲,没有什么能阻止你为Trace编写自己的ETW监听器。< / p>