.NET Tracing: Что такое прослушиватель по умолчанию? - PullRequest
24 голосов
/ 04 ноября 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>

Что такое слушатель По умолчанию и почему он существует по умолчанию?

Парень из Microsoft сделал тесты издержек с разными слушателями :

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

Что такое Default слушатель трассировки и почему он такой медленный?Это OutputDebugString?OutputDebugString действительно на два порядка медленнее, чем запись в файл?

Есть ли .NET TraceListener, который просто использует OutputDebugString?

Что такое стандартный прослушиватель трассировки, почему он такой медленный, почему его обычно удаляют, и еслиэто так плохо, почему это по умолчанию?

1 Ответ

11 голосов
/ 04 ноября 2011

Из этого сообщения в блоге неясно, как выполнялся код, но DefaultTraceListener задокументировано так:

По умолчанию методы Write и WriteLine генерируютсообщение для функции Win32 OutputDebugString и метода Debugger.Log.Для получения информации о функции OutputDebugString см. Platform SDK или MSDN.

Так что, если Debugger.Log на самом деле печатает в окне пользовательского интерфейса (и, вполне возможно, прокручивает его и т. Д.), Я вижу, что это вызывает многозамедления.

...