Dot-Net

.NET 跟踪:什麼是“預設”偵聽器?

  • November 4, 2011

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

什麼是預設偵聽器,為什麼預設存在?

一個微軟的人用不同的聽眾對成本進行了基準測試

Default                    |===============================14,196 ms=====/ /================> 
TextWriterTraceListener    |=========211 ms======>
EventProviderTraceListener |=> 77ms

什麼是Default跟踪偵聽器,為什麼這麼慢?是OutputDebugString嗎?真的比寫入文件慢兩個數量級OutputDebugString嗎?

是否TraceListener隻使用.NET 的 .NET OutputDebugString

什麼是預設跟踪偵聽器,為什麼這麼慢,為什麼習慣性地刪除它,如果它那麼糟糕,為什麼它是預設的?

從那篇部落格文章中不清楚程式碼是如何執行的,但DefaultTraceListener記錄如下:

預設情況下,Write 和 WriteLine 方法將消息發送到 Win32 OutputDebugString 函式和 Debugger.Log 方法。有關 OutputDebugString 函式的資訊,請參閱 Platform SDK 或 MSDN。

因此,如果Debugger.Log實際上是列印到 UI 視窗(並且很可能滾動它等),我可以看到這導致了很多減速。

引用自:https://stackoverflow.com/questions/8010255