当使用 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/