2017-04-20 4 views
2

System.Diagnostics.Tracingを使用するETWとSystem.Diagnostics.Traceを使用するETWの主な違いを理解できません。私は両者ともイベントをいくつかの出力ストリームにダンプすることができ、さまざまなリスナーを使用してカスタムリスナーを含むこのデータを傍受できることを理解しています。System.Diagnostics.Tracing.EventSourceとSystem.Diagnostics.Trace

ただし、ETWのインフラストラクチャがWindowsに組み込まれていて、WPRとPerfViewをそのまま使用できる点を除いて、違いはありません。

私はいつ別のものを選ぶでしょうか?

+0

イベントを消費するためにどちらかを使用できるとは確信していません。 AFAIKでは、管理対象外のETW APIをP/Invokeしない限り、イベントを生成することができます。 – stakx

+0

さて、System.Diagnostics.Tracingからイベントを消費するために、トレースリスナー(カスタムイベントを含む)をApp.Configに追加することができます。 ETWについて - 私はカスタムコンシューマーの作成に関するチュートリアルを見たことは確かですが、確かにPerfViewなどを使用することができます。 – user884248

+0

私の悪い、ごめんなさい。私は 'System.Diagnostics.Trace'クラスを別の名前空間に間違えてしまい、あなたの質問に間違いがありました。 – stakx

答えて

2

System.Diagnostics.Tracingがはるかに完全Traceより:

  • イベントはあなたが(パフォーマンスのために良い)すべてのイベントのソースの内部
  • に加入する必要がないことを意味し、イベントソースによって分離され、イベントは、(彼らは単なる文字列じゃない、彼らはまた、より多くの情報を提供するためにペイロードを持つことができます)
あなたは
  • イベントが構成されているいくつかのより多くをフィルタリングすることができることを意味、名前と「EventLevel」によって分離されています10

    一方、System.Diagnostic.Traceは簡単なロガーです。文字列のみをログに記録することはできますし、あらゆる種類のフィルタリングを適用することはできません(すべてのメッセージに対して有効にするか、すべて無効にするかのいずれかです)。しかし、Visual Studioデバッガではデフォルトごとにサポートされるという利点があります(プロセスにアタッチすると、出力ウィンドウにトレースイベントが直接表示されます)。

    私は、ボックスの外に用意されているETWリスナーはSystem.Diagnostics.Tracingという素晴らしい特典ですが、技術的にはTraceのETWリスナーを書くことはできません。

  • +0

    ありがとうKevin - すばらしい答え! – user884248

    +3

    ETWを静的な 'Trace'クラスと比較すると、これはすべて正しいです。 sthがあります。これらの2つの間のどこかにある: 'System.Diagnostics.TraceSource'。これらはETWプロバイダーと多少似ています。文字列だけでなく、オブジェクトもログできます。次に、イベントをフィルタリングできるトレースレベルとスイッチがあります。 'TraceSource'とETWはTrace vs ETWよりももっと公平な比較になるだろうが(それは機能の完全性がより似ているから)、それはあなたの答えの批判ではなく、単なる示唆である。 – stakx

    +0

    @stakx非常に良い点、私はこれを知らなかった –

    関連する問題