24

ETW と、t を高性能アプリケーションに統合する方法について頭を悩ませようとしています。

構造化されていない (したがって最適ではない) API を使用する、古い恐ろしい EventLog を私たちは皆知っています。

現在、高性能トレース用の新しい洗練された API である ETW があり、4.5 では、簡単にサブクラス化できる EventSource クラスの形式で .NET 側に新しい API を取得しました (したがって、マニフェストを記述する必要はありません)。

これにより、これを機能させようとして、いくつかの質問が残ります。

  • ETW を操作し、そこから EventLog にイベントを取得するための現在提案されている最良の (ドキュメント、ガイドラインに従って) 方法は何ですか? ここに、(パフォーマンス) イベントを記述する必要があるアプリケーションがあり、ETW を使用したいと考えています。ただし、イベントは (カスタム) イベント ログに表示されます。
  • これの完全な例はありますか?いくつか見つけることができますが、それらはすべて .NET 4.0 の日付であり、マニフェストから始まります。

私は何を試しましたか?私は EventSource を機能させましたが、そこからダウンストリームで残りを機能させる方法に関する適切なドキュメントを取得できませんでした。

4

6 に答える 6

10

2013 年 8 月、Microsoft.Diagnostics.Tracing.EventSource 1.0.4 ベータ版が NuGet でリリースされました。3 つの大きな利点は、チャネルのサポート、静的 (インストール済み) マニフェストのサポート (イベント ビューアーに入るために必要な 2 つのこと)、および .NET 4.0 のサポートです。

RTM を発表したブログ投稿によると、Microsoft.Diagnostics.Tracing.EventSource は「運用環境を含め、Windows イベント ログへの高速アプリ トレースを有効にします」。

于 2013-09-05T21:43:13.077 に答える
8

あなたが達成しようとしていることは、次の理由により不可能です。

  • ETW イベントをイベント ログに送信するには、マニフェストで管理者、運用、またはアプリケーションのような従来型のチャネルを指定し、wevtutil を使用して登録する必要があります。残念ながら、マニフェストがあったとしても、これに EventSource を使用することはできません。これは、WriteEvent を呼び出すときに基になる実装が EventDescriptor ブロックにチャネル バイトを設定しないためです。たとえば、イベントが特定のチャネルに対してマークされることはありません。

  • マニフェストの登録、win32 リソースへのコンパイル、アセンブリ/dll へのリンク、登録などの面倒なプロセスを回避するために EventSource が舞台裏で行うことは、EventSource 実装からマニフェストを生成し、それを既知のイベントとして送信することです。 Windows インフラストラクチャに依存してマニフェスト情報を取得する代わりに、受信サービスが他のすべてのイベント ペイロードを解析できるようにします。私の知る限り、今のところこれをサポートしているのは PerfView だけです。

于 2013-02-24T19:22:22.373 に答える
0

小さな導入チュートリアルがあります:

http://blogs.msdn.com/b/vancem/archive/2012/08/13/windows-high-speed-logging-etw-in-c-net-using-system-diagnostics-tracing-eventsource.aspx

http://blogs.msdn.com/b/vancem/archive/2012/07/09/logging-your-own-etw-events-in-c-system-diagnostics-tracing-eventsource.aspx

現在.NET 4を使用しているため、試していませんが、これらのリンクが役立つかもしれません...

于 2013-01-25T09:23:11.140 に答える