3

XPerfを使用して、パフォーマンス分析用のアプリケーションをインストルメント化する実験を行っています。私の目標は、C#アプリケーション内の開始/停止イベントをログに記録し、これらのイベント間の特定のカーネルメトリックを分析することです。

TraceListenerアプリケーション内でとを作成し、TraceSourceイベントをソースに記録しています。次に、logmanを使用して2つのセッションを開始します。1つはプロバイダーからのイベントをキャプチャし、もう1つはカーネルイベントをキャプチャします(xperf -on DiagEasy)。セッションの最後に、XPerfを使用してこれらのファイルをマージし、グラフを表示/オーバーレイします。これはすべてうまく機能します。

アプリケーションのイベントは「汎用イベント」チャートに表示されますが、イベントには識別情報(名前もイベントデータもありません)がないため、どのイベントがどれであるかを判断するのは困難です。tracerptトレース出力で実行すると「dumpfile.xml」に表示されるため、イベントデータがキャプチャされていることがわかります。XPerf内の「汎用イベント」にイベント名またはイベントデータを添付する方法はありますか?XPerfを使用する私のアプローチは間違っていますか?

ETWの使用方法を示すサンプルコードを次に示します。

static Guid providerId = new Guid("{4A9FD4F3-032B-4733-8455-03BC71ECEFB0}");
static void Main(string[] args)
{
    EventProviderTraceListener listener =
        new EventProviderTraceListener(providerId.ToString());
    TraceSource source = new TraceSource("ProductRepository", SourceLevels.All);
    source.Listeners.Add(listener);

    int id = 12;
    source.TraceData(TraceEventType.Warning, 12, "Some sample data");
    source.TraceEvent(TraceEventType.Start, 1, "TraceEvent.Start({0})", id);
    source.TraceEvent(TraceEventType.Stop, 1, "TraceEvent.Stop({0})", id);
    source.TraceInformation("TraceInformation");
}
4

2 に答える 2

1

.net4.5の新しいSystem.Diagnostics.Tracing.EventSourceクラスを使用します。Vanceは、その使用方法のデモを作成しました。

はじめにチュートリアル:C#でのETWイベントのログ記録:System.Diagnostics.Tracing.EventSource http://blogs.msdn.com/b/vancem/archive/2012/07/09/logging-your-own-etw-events-in- c-system-diagnostics-tracing-eventsource.aspx

于 2012-12-03T14:36:15.897 に答える
1

user31273が言及しているように、XPerfがイベントのペイロードを理解するための鍵は、プロバイダーのマニフェストを登録することです。magicandre1981によってリンクされたビデオは見ませんでしたが、VanceがC#プロバイダーの登録方法について言及しているに違いありません。必要なものを取得するには、適切なオペコード(開始/停止)を指定することを忘れないでください。

于 2013-01-06T02:04:49.237 に答える