トレース データへのアクセス

.NET TraceProcessing は、NuGet から次のパッケージ ID を使用して入手できます。

Microsoft.Windows.EventTracing.Processing.All

このパッケージを使用すると、トレース ファイル内のデータにアクセスできます。 まだトレース ファイルがない場合は、Windows パフォーマンス レコーダーを使用して作成できます。

次のコンソール アプリの例では、トレースに含まれるすべてのプロセスのコマンド ラインにアクセスする方法を示します。

using Microsoft.Windows.EventTracing;
using Microsoft.Windows.EventTracing.Processes;
using System;

class Program
{
    static void Main(string[] args)
    {
        if (args.Length != 1)
        {
            Console.Error.WriteLine("Usage: <trace.etl>");
            return;
        }

        using (ITraceProcessor trace = TraceProcessor.Create(args[0]))
        {
            IPendingResult<IProcessDataSource> pendingProcessData = trace.UseProcesses();

            trace.Process();

            IProcessDataSource processData = pendingProcessData.Result;

            foreach (IProcess process in processData.Processes)
            {
                Console.WriteLine(process.CommandLine);
            }
        }
    }
}

TraceProcessor の使用

トレースを処理するには、TraceProcessor.Create を呼び出します。 コア インターフェイスは ITraceProcessor であり、このインターフェイスを使用するには次のパターンが関与します。

  1. まず、トレースから使用する必要があるデータをプロセッサに伝え、
  2. 次にトレースを処理し、そして
  3. 最後に、結果にアクセスします。

必要なデータの種類をプロセッサに前もって伝えるということは、考えられるあらゆる種類の大量のトレース データの処理に時間を費やす必要がないことを意味します。 代わりに、TraceProcessor では要求された特定の種類のデータを提供するのに必要な作業のみを実行します。

TraceProcessor で使用することを推奨している、プロジェクト設定をいくつか紹介します。

  1. exe を 64 ビットとして実行することをお勧めします。

    新しい C# .NET Framework コンソール アプリケーション向けの Visual Studio の既定値は、[任意の CPU] で [32 ビットを優先] がオンになっています。 .NET の既定値には、既に推奨設定が設定されている可能性があります。

    トレース処理は、特にトレースのサイズが大きいとメモリ消費が大きくなることがあるため、TraceProcessor が使用される exe の [プラットフォーム ターゲット] を [x64] (または [32 ビットを優先] をオフにする) ことをお勧めします。 これらの設定を変更するには、プロジェクトの [プロパティ] の下にある [ビルド] タブを確認してください。 すべての構成に対してこれらの設定を変更するには、[構成] ドロップダウンが既定値の現在の構成のみではなく、[すべての構成] に設定されている必要があります。

  2. NuGet は、以前の packages.config モードではなく、新しいスタイルの PackageReference モードで使用することをお勧めします。

    新しいプロジェクトの既定値を変更するには、[ツール]、[NuGet パッケージ マネージャー]、[パッケージ マネージャー設定]、[パッケージ管理]、[既定のパッケージ管理形式] を確認してください。

組み込みデータ ソース

.etl ファイルでは、トレース内の多くの種類のデータをキャプチャできます。 .etl ファイル内のデータは、トレースのキャプチャ時に有効になっていたプロバイダーによって異なります。 次の一覧は、TraceProcessor から使用できるトレース データの種類を示しています。

コード 説明 関連する WPA の項目
trace.UseClassicEvents() スキーマ情報が含まれないクラシック ETW イベントをトレースから提供します。 Generic Events (汎用イベント) テーブル ([Event Type](イベントの種類) が [Classic](クラシック) または [WPP] の場合)
trace.UseConnectedStandbyData() 接続されたスタンバイを開始および終了するシステムに関するデータをトレースから提供します。 CS Summary (CS サマリー) テーブル
trace.UseCpuIdleStates() CPU の C 状態に関するデータをトレースから提供します。 CPU Idle States (CPU アイドル状態) テーブル ([Type](種類) が [Actual](実際値) の場合)
trace.UseCpuSamplingData() 命令ポインターの定期的なサンプリングに基づいて、CPU 使用率に関するデータをトレースから提供します。 CPU Usage (Sampled) (CPU 使用率 (サンプリング)) テーブル
trace.UseCpuSchedulingData() コンテキストの切り替えや準備スレッドのイベントなど、CPU スレッドのスケジュール設定に関するデータをトレースから提供します。 CPU Usage (Precise) (CPU 使用率 (厳密)) テーブル
trace.UseDevicePowerData() デバイスの D 状態に関するデータをトレースから提供します。 Device DState (デバイス D 状態) テーブル
trace.UseDirectXData() DirectX アクティビティに関するデータをトレースから提供します。 GPU Utilization (GPU 使用率) テーブル
traceUseDiskIOData() ディスク I/O アクティビティに関するデータをトレースから提供します。 Disk Usage (ディスク使用率) テーブル
trace.UseEnergyEstimationData() エネルギー見積もりエンジンからプロセスごとに見積もられたエネルギー使用量に関するデータをトレースから提供します。 Energy Estimation Engine Summary (by Process) (エネルギー見積りエンジン サマリー (プロセス別)) テーブル
trace.UseEnergyMeterData() エネルギー メーター インターフェイス (EMI) から測定されたエネルギー使用量に関するデータをトレースから提供します。 Energy Estimation Engine (by Emi) (エネルギー見積りエンジン (EMI 別)) テーブル
trace.UseFileIOData() ファイル I/O アクティビティに関するデータをトレースから提供します。 File I/O (ファイル I/O) テーブル
trace.UseGenericEvents() マニフェスト イベントと TraceLogging イベントをトレースから提供します。 Generic Events (汎用イベント) テーブル ([Event Type](イベントの種類) が [Manifested](マニフェスト) または [TraceLogging] の場合)
trace.UseHandles() アクティブなカーネル ハンドルに関する部分的なデータをトレースから提供します。 Handles (ハンドル) テーブル
trace.UseHardFaults() ハード ページ フォールトに関するデータをトレースから提供します。 Hard Faults (ハード フォールト) テーブル
trace.UseHeapSnapshots() プロセス ヒープの使用状況に関するデータをトレースから提供します。 Heap Snapshot (ヒープ スナップショット) テーブル
trace.UseHypercalls() トレース中に発生した Hyper-V ハイパーコールに関するデータを提供します。
trace.UseImageSections() イメージのセクションに関するデータをトレースから提供します。 CPU Usage (Sampled) (CPU 使用率 (サンプリング)) テーブルの [Section Name](セクション名) 列
trace.UseInterruptHandlingData() 割り込みサービス ルーチン (ISR) と遅延プロシージャ呼び出し (DPC) アクティビティに関するデータをトレースから提供します。 DPC/ISR テーブル
trace.UseMarks() マーク (ラベル付きタイムスタンプ) をトレースから提供します。 Marks (マーク) テーブル
trace.UseMemoryUtilizationData() システム メモリの合計使用率に関するデータをトレースから提供します。 Memory Utilization (メモリ使用率) テーブル
trace.UseMetadata() さらに処理することなく使用できるトレース メタデータを提供します。 [System Configuration](システム構成)、[Traces and General](トレースと全般)
trace.UsePlatformIdleStates() システムのターゲットと実際のプラットフォームのアイドル状態に関するデータをトレースから提供します。 Platform Idle State (プラットフォーム アイドル状態) テーブル
trace.UsePoolAllocations() カーネル プールのメモリ使用量に関するデータをトレースから提供します。 Pool Summary (プール サマリー) テーブル
trace.UsePowerConfigurationData() トレースからシステムの電源構成に関するデータを提供します。 [System Configuration](システム構成)、[Power Settings](電源設定)
trace.UsePowerDependencyCoordinatorData() トレースからアクティブな電源の依存関係コーディネーター フェーズに関するデータを提供します。 Notification Phase Summary (通知フェーズ サマリー) テーブル
trace.UseProcesses() トレース中にアクティブなプロセスに関するデータと、そのイメージと PDB を提供します。 Processes (プロセス) テーブル、Images (イメージ) テーブル、[Symbols Hub](シンボル ハブ)
trace.UseProcessorCounters() プロセッサ カウンター モニター (PCM) のプロセッサ パフォーマンス カウンター値に関するデータをトレースから提供します。
trace.UseProcessorFrequencyData() プロセッサが実行された周波数に関するデータをトレースから提供します。 Processor Frequency (プロセッサ周波数) テーブル ([Type](種類) が [Actual](実際値) の場合)
trace.UseProcessorProfileData() アクティブなプロセッサの電源プロファイルに関するデータをトレースから提供します。 Processor Profiles (プロセッサ プロファイル) テーブル
trace.UseProcessorParkingData() トレースからパークまたはパーク解除されたプロセッサに関するデータを提供します。 Processor Parking State (プロセッサ パーク状態) テーブル
trace.UseProcessorParkingLimits() パーク解除されていないプロセッサの許容最大数に関するデータをトレースから提供します。 Core Parking Cap State (コア パーク キャップ状態) テーブル
trace.UseProcessorQualityOfServiceData() 各プロセッサのサービス レベルの品質に関するデータをトレースから提供します。 Processor Qos Class (プロセッサ Qos クラス) テーブル
trace.UseProcessorThrottlingData() プロセッサの最大周波数スロットリングに関するデータをトレースから提供します。 Processor Constraints (プロセッサ制約) テーブル
trace.UseReadyBootData() Ready Boot からのブート プリフェッチ アクティビティに関するデータをトレースから提供します。 Ready Boot Events (Ready Boot イベント) テーブル
trace.UseReferenceSetData() 各プロセスで使用される仮想メモリのページに関するデータをトレースから提供します。 Reference Set (参照セット) テーブル
trace.UseRegionsOfInterest() 指名された関心領域の間隔を、xml 構成ファイルで指定されたとおりにトレースから提供します。 Regions of Interest (関心領域) テーブル
trace.UseRegistryData() トレース中のレジストリ アクティビティに関するデータを提供します。 Registry (レジストリ) テーブル
trace.UseResidentSetData() 物理メモリに常駐していた各プロセスの仮想メモリのページに関するデータをトレースから提供します。 Resident Set (常駐設定) テーブル
trace.UseRundownData() トレースのランダウン データ コレクションが発生した間隔に関するデータをトレースから提供します。 グラフ タイムラインの網掛けの領域
trace.UseScheduledTasks() トレース中に実行されたスケジュールが設定されたタスクに関するデータを提供します。 Scheduled Tasks (スケジュールが設定されたタスク) テーブル
trace.UseServices() トレース中にアクティブまたは状態がキャプチャされたサービスに関するデータを提供します。 Services (サービス) テーブル、[System Configuration](システム構成)、[Services](サービス)
trace.UseStacks() トレース中に記録されたスタックに関するデータを提供します。
trace.UseStackEvents() トレース中に記録されたスタックに関連付けられたイベントに関するデータを提供します。 Stacks (スタック) テーブル
trace.UseStackTags() トレースからスタック タグにスタックをグループ化するマッパーを、XML 構成ファイルで指定されたとおりに提供します。 [Stack Tag](スタック タグ) や [Stack (Frame Tags)](スタック (フレーム タグ)) などの列
trace.UseSymbols() トレースのシンボルを読み込む機能を提供します。 [Configure Symbol Paths](シンボル パスの構成)、[Load Symbols](シンボルの読み込み)
trace.UseSyscalls() トレース中に発生したシステム コールに関するデータを提供します。 Syscalls (システム コール) テーブル
trace.UseSystemMetadata() 一般的なシステム全体のメタデータをトレースから提供します。 システム構成
trace.UseSystemPowerSourceData() アクティブなシステム電源に関するデータ (AC と DC の比較) をトレースから提供します。 System Power Source (システム電源) テーブル
trace.UseSystemSleepData() システム電源の全体的な状態に関するデータをトレースから提供します。 Power Transition (電源切り替え) テーブル
trace.UseTargetCpuIdleStates() ターゲット CPU の C 状態に関するデータをトレースから提供します。 CPU Idle States (CPU アイドル状態) テーブル ([Type](種類) が [Target](ターゲット) の場合)
trace.UseTargetProcessorFrequencyData() ターゲット プロセッサの周波数に関するデータをトレースから提供します。 Processor Frequency (プロセッサ周波数) テーブル ([Type](種類) が [Target](ターゲット) の場合)
trace.UseThreads() トレース中にアクティブなスレッドに関するデータを提供します。 Thread Lifetimes (スレッド有効期間) テーブル
trace.UseTraceStatistics() トレース内のイベントに関する統計情報を提供します。 [System Configuration](システム構成)、[Trace Statistics](トレースの統計情報)
trace.UseUtcData() ユニバーサル利用統計情報クライアント (UTC) を使用して、Microsoft のテレメトリ アクティビティに関するデータをトレースから提供します。 Utc テーブル
trace.UseWindowInFocus() フォーカスが当たっているアクティブな UI ウィンドウに対する変更に関するデータをトレースから提供します。 Window in Focus (フォーカスが当たっているウィンドウ) テーブル
trace.UseWindowsTracePreprocessorEvents() Windows ソフトウェア トレース プリプロセッサ (WPP) のイベントをトレースから提供します。 WPP Trace (WPP トレース) テーブル、Generic Events (汎用イベント) テーブル ([Event Type](イベントの種類) が [WPP] の場合)
trace.UseWinINetData() Windows Internet (WinINet) を介して、インターネット アクティビティに関するデータをトレースから提供します。 Download Details (ダウンロード詳細) テーブル
trace.UseWorkingSetData() 各プロセスまたはカーネル カテゴリのワーキング セットに含まれていた仮想メモリのページに関するデータをトレースから提供します。 Virtual Memory Snapshots (仮想メモリ スナップショット) テーブル

さらに、使用可能なすべてのトレース データについて ITraceSource の拡張メソッドを参照するか、IntelliSense によって示される "trace." から使用可能なメソッドを確認してください。

次の手順

この概要では、TraceProcessor を使用してトレース データにアクセスする方法と、アクセスできる組み込みのデータ ソースについて説明しました。

次の手順では、TraceProcessor を拡張してカスタム トレース データにアクセスする方法について説明します。