c# - DefaultTraceListener 的性能影响

标签 c# performance trace system.diagnostics

当使用 System.Diagnostics 跟踪时,如果不删除 production ASP.NET 应用程序中的“默认”跟踪监听器,是否会对性能产生重大(可衡量的)影响? release 模式,在编译时定义了 TRACE 常量,但在运行时没有附加调试器?

澄清一下,问题是关于“默认”跟踪监听器对使用其他跟踪监听器的应用程序的额外影响,而不是关于 System.Diagnostics 跟踪的替代方案。

当没有附加调试器时,是否有任何衡量默认跟踪监听器影响的措施?是否已经完成了从代码中删除“删除”元素对生产的影响的基准测试,例如:

<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>

这个问题不同于.NET Tracing: What is the “Default” listener?从某种意义上说,另一个问题的重点是在 Visual Studio 下运行并更新调试 UI 时默认监听器的影响,而这个问题的重点是生产环境中的发布代码。

最佳答案

如果继续使用默认跟踪监听器进行跟踪,可能会对性能产生重大影响。

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


保留默认监听器会导致框架通过 OutputDebugString 记录调用.这可以have a significant impact性能,即使在没有调试器的发布版本中也是如此。

关于c# - DefaultTraceListener 的性能影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15119791/

相关文章:

c# - 在 .NET 4.0 中,值类型的 Equals 默认实现是什么?

debugging - Linux 内核 - Tracefs 与 debugvs

c++ - 是否有 C++11 或 Win32 方法来可靠地生成和保存跟踪信息?

c# - 添加/删除 TraceListener 到所有 TraceSources

c# - 使用套接字发送回复广播

java - 为什么 Java 只接受具有相同返回类型的重写基类方法?

c# - 在一台设备上使用代码并使用推送通知向其他设备显示 'result'

javascript - 如何分析并获取 Javascript 性能

sql - 为什么这个 LEFT JOIN 运行缓慢?

Java 8 - 将 List<byte[]> 合并到 byte[] 的最有效方法