.NET人员中进行跟踪的每个示例都删除了“Default
”侦听器:
<configuration>
<system.diagnostics>
<sources>
<source name="TraceSourceApp" switchName="SourceSwitch" switchType="System.Diagnostics.SourceSwitch">
<listeners>
<add name="ConsoleListener"/>
<add name="ETWListener"/>
<remove name="Default"/>
</listeners>
什么是默认侦听器,默认情况下为什么存在?
微软的家伙做了benchmarks of the overhead with different listeners:
Default |===============================14,196 ms=====/ /================>
TextWriterTraceListener |=========211 ms======>
EventProviderTraceListener |=> 77ms
Default
跟踪侦听器是什么,为什么这么慢?是 OutputDebugString
吗? OutputDebugString
是否真的比写入文件慢两个数量级?是否存在仅使用
TraceListener
的.NET OutputDebugString
?默认跟踪侦听器是什么?为什么它这么慢?为什么通常删除它?如果很糟糕,为什么默认它呢?
最佳答案
从那篇博客文章中尚不清楚代码是如何运行的,但是 DefaultTraceListener
的记录如下:
因此,如果Debugger.Log
实际上正在打印到UI窗口(并且很有可能滚动它等),我可以看到这导致了很多减速。