DefaultTraceListener的性能影响

Fer*_*eia 8 c# performance trace system.diagnostics

使用System.Diagnostics跟踪时,是否在发布模式下不在生产 ASP.NET应用程序上删除"默认"跟踪侦听器时会产生显着(可测量)性能影响,在编译时定义常量但在运行时没有附加调试器?TRACE

为了澄清,问题是"默认"跟踪侦听器对使用其他跟踪侦听器的应用程序的影响,而不是System.Diagnostics跟踪的替代方案.

没有连接调试器时,是否有任何衡量默认跟踪侦听器的影响?是否已经对生产中的影响做了任何基准测试,从而忽略了代码中的"remove"元素:

<configuration>
<system.diagnostics>
  <trace autoflush="false" indentsize="4">
    <listeners>
      <remove name="Default" />
      <add name="myListener"  type="System.Diagnostics.TextWriterTraceListener"    initializeData="c:\myListener.log" />
    </listeners>
  </trace>
</system.diagnostics>
</configuration>
Run Code Online (Sandbox Code Playgroud)

这个问题与.NET跟踪不同:什么是"默认"监听器?从某种意义上说,当在Visual Studio下运行并更新调试UI时,其他问题集中在默认侦听器的影响上,而这个问题主要关注生产环境中的发布代码.

Ree*_*sey 14

如果使用默认跟踪侦听器保留跟踪,则可能会对性能产生重大影响.

如果您想要生产就绪性能跟踪,我强烈建议使用.NET 4.5中的EventSource类而不是跟踪方法.这可以通过创建ETW事件源与PerfView一起使用,即使在生产中输出跟踪信息,也几乎不会影响运行时.


保留默认侦听器会导致框架通过OutputDebugString记录调用.即使在没有调试器的发布版本中,这也会对性能产生重大影响.