24

.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?ファイルへの書き込みよりも2 桁OutputDebugString遅いですか?

TraceListenerを使用するだけの .NET はありますOutputDebugStringか?

デフォルトのトレース リスナとは何ですか?なぜそんなに遅いのですか?なぜ慣習的に削除されるのですか?それが非常に悪い場合、なぜそれがデフォルトなのですか?

4

2 に答える 2

11

そのブログ投稿からは、コードがどのように実行されたかは明らかではありませんが、次のDefaultTraceListenerように文書化されています。

デフォルトでは、Write メソッドと WriteLine メソッドはメッセージを Win32 OutputDebugString 関数と Debugger.Log メソッドに出力します。OutputDebugString 関数の詳細については、プラットフォーム SDK または MSDN を参照してください。

そのDebugger.Logため、実際に UI ウィンドウに印刷している場合 (そして、おそらくそれをスクロールしている場合など)、多くの速度低下を引き起こしていることがわかります。

于 2011-11-04T14:00:25.060 に答える