System.Diagnostics.Tracing.EventSource vs System.Diagnostics



我不确定我使用system.diarostics.tracing和使用system.diarostics.trace的ETW之间的主要差异。我知道,对于两者,我都可以将事件转移到一些输出流上,并且我可以使用各种侦听器拦截这些数据 - 包括自定义侦听器。

但是,除了ETW的基础架构嵌入窗口的事实,我可以在框外使用wpr和perfview,我看不到差异。

我什么时候可以选择一个?

System.Diagnostics.TracingTrace要完整得多:

  • 事件被隔离为事件来源,这意味着您不必订阅所有事件(适合性能(
  • 在源内,事件被用名称和" eventlevel"隔离,这意味着您可以过滤更多
  • 事件是结构化的(它们不仅是字符串,还可以有有效载荷以提供更多信息(

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

我会补充说,开箱即用的ETW侦听器是System.Diagnostics.Tracing的好处,但是从技术上讲,没有什么可以阻止您为Trace编写自己的ETW侦听器。

相关内容

最新更新