访问跟踪数据

可使用以下包 ID ,从 NuGet 获得 .NET TraceProcessing:

Microsoft.Windows.EventTracing.Processing.All

利用此包可访问跟踪文件中的数据。 如果还没有跟踪文件,可以使用 Windows Performance Recorder 创建一个。

下面的示例控制台应用程序演示如何访问跟踪中包含的所有进程的命令行:

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. 建议以 64 位运行 exe。

    对于新的 C# .NET Framework 控制台应用程序,Visual Studio 默认设置为已选中“首选 32 位”的任何 CPU。 .NET Core 的默认设置可能已经包含推荐设置。

    跟踪处理可能会占用大量内存,尤其是对于较大的跟踪,建议在使用 TraceProcessor 的 exe 中将平台目标更改为 x64(或取消选中“首选 32 位”)。 若要更改这些设置,请参阅项目“属性”下的“生成”选项卡。 若要更改所有配置的这些设置,请确保将“配置”下拉列表设置为“所有配置”,而不是默认的仅限当前配置。

  2. 建议使用 NuGet 较新样式的 PackageReference 模式,而不是较旧的 packages.config 模式。

    若要更改新项目的默认值,请依次查看“工具”、“NuGet 包管理器”、“包管理器设置”、“包管理”、“默认包管理格式”。

内置数据源

.etl 文件可以在跟踪中捕获多种类型的数据。 请注意,.etl 文件中存在哪些数据取决于捕获跟踪时启用的提供程序。 以下列表显示了 TraceProcessor 提供的跟踪数据类型:

代码 说明 相关的 WPA 项
trace.UseClassicEvents() 提供跟踪中的经典 ETW 事件,其中不包括架构信息。 泛型事件表(事件类型为 Classic 或 WPP 时)
trace.UseConnectedStandbyData() 提供有关系统进入和退出连接待机的跟踪数据。 CS 摘要表
trace.UseCpuIdleStates() 提供有关 CPU C-state 的跟踪数据。 CPU 空闲状态表(类型为 Actual 时)
trace.UseCpuSamplingData() 根据指令指针的定期采样,提供有关 CPU 使用率的跟踪数据。 CPU 使用率(采样)表
trace.UseCpuSchedulingData() 提供有关 CPU 线程计划的跟踪数据,其中包括上下文切换和就绪线程事件。 CPU 使用率(精确)表
trace.UseDevicePowerData() 提供有关设备 D-state 的跟踪数据。 设备 DState 表
trace.UseDirectXData() 提供有关 DirectX 活动的跟踪数据。 GPU 利用率表
traceUseDiskIOData() 提供有关磁盘 I/O 活动的跟踪数据。 磁盘使用情况表
trace.UseEnergyEstimationData() 提供有关通过 Energy Estimation Engine 估算的每个进程电能使用情况的跟踪数据。 Energy Estimation Engine 摘要(按进程)表
trace.UseEnergyMeterData() 提供有关通过电能表接口 (EMI) 测量的电能使用情况的跟踪数据。 Energy Estimation Engine(按 EMI)表
trace.UseFileIOData() 提供有关文件 I/O 活动的跟踪数据。 文件 I/O 表
trace.UseGenericEvents() 提供跟踪中的 Manifested 和 TraceLogging 事件。 泛型事件表(事件类型为 Manifested 或 TraceLogging 时)
trace.UseHandles() 提供有关活动内核句柄的部分跟踪数据。 句柄表
trace.UseHardFaults() 提供有关硬页面错误的跟踪数据。 硬错误表
trace.UseHeapSnapshots() 提供有关进程堆使用情况的跟踪数据。 堆快照表
trace.UseHypercalls() 提供有关在跟踪期间发生的 Hyper-V 超级调用的数据。
trace.UseImageSections() 提供有关图像部分的跟踪数据。 CPU 使用率(采样)表的部分名称列
trace.UseInterruptHandlingData() 提供有关中断服务例程 (ISR) 和延迟过程调用 (DPC) 活动的跟踪数据。 DPC/ISR 表
trace.UseMarks() 提供跟踪标记(标记的时间戳)。 标记表
trace.UseMemoryUtilizationData() 提供有关整个系统内存利用率的跟踪数据。 内存利用率表
trace.UseMetadata() 提供无需进一步处理即可使用的跟踪元数据。 系统配置、跟踪和常规
trace.UsePlatformIdleStates() 提供有关系统的目标和实际平台空闲状态的跟踪数据。 平台空闲状态表
trace.UsePoolAllocations() 提供有关内核池内存使用情况的跟踪数据。 池摘要表
trace.UsePowerConfigurationData() 提供有关系统电源配置的跟踪数据。 系统配置、电源设置
trace.UsePowerDependencyCoordinatorData() 提供有关活动电源依赖关系协调器阶段的跟踪数据。 通知阶段摘要表
trace.UseProcesses() 提供有关跟踪期间处于活动状态的进程及其图像和 PDB 的数据。 进程表;图像表表;符号中心
trace.UseProcessorCounters() 提供有关处理器计数器监视器 (PCM) 中处理器性能计数器值的跟踪数据。
trace.UseProcessorFrequencyData() 提供有关处理器运行频率的跟踪数据。 处理器频率表(类型为 Actual 时)
trace.UseProcessorProfileData() 提供有关活动处理器电源配置文件的跟踪数据。 处理器配置文件表
trace.UseProcessorParkingData() 提供有关哪些处理器已休止或未休止的跟踪数据。 处理器休止状态表
trace.UseProcessorParkingLimits() 提供有关允许的未休止处理器最大数的跟踪数据。 内核休止上限状态表
trace.UseProcessorQualityOfServiceData() 提供有关每个处理器的服务级别质量的跟踪数据。 处理器 Qos 类表
trace.UseProcessorThrottlingData() 提供有关处理器最大频率限制的跟踪数据。 处理器约束表
trace.UseReadyBootData() 提供有关通过 Ready Boot 启动预提取活动的跟踪数据。 Ready Boot 事件表
trace.UseReferenceSetData() 提供有关每个进程使用的虚拟内存页的跟踪数据。 引用组表
trace.UseRegionsOfInterest() 提供 xml 配置文件中指定的跟踪中命名感兴趣区域间隔。 感兴趣的区域表
trace.UseRegistryData() 提供有关跟踪期间注册表活动的数据。 注册表
trace.UseResidentSetData() 提供有关物理内存中驻留的每个进程的虚拟内存页的跟踪数据。 驻留组表
trace.UseRundownData() 提供有关发生跟踪流程数据收集的时间间隔的跟踪数据。 图形时间线中的着色区域
trace.UseScheduledTasks() 提供有关跟踪期间运行的计划任务的数据。 计划任务表
trace.UseServices() 提供有关在跟踪期间处于活动状态或已捕获其状态的服务的数据。 服务表;系统配置、服务
trace.UseStacks() 提供有关跟踪期间记录的堆栈的数据。
trace.UseStackEvents() 提供有关与跟踪期间记录的堆栈关联的事件的数据。 堆栈表
trace.UseStackTags() 提供一个映射器,用于将跟踪中的堆栈分组到 XML 配置文件中指定的堆栈标记。 堆栈标记和堆栈(帧标记)等列
trace.UseSymbols() 提供加载跟踪符号的功能。 配置符号路径;加载符号
trace.UseSyscalls() 提供有关跟踪期间发生的 syscall 的数据。 Syscall 表
trace.UseSystemMetadata() 提供跟踪中系统范围的常规元数据。 系统配置
trace.UseSystemPowerSourceData() 提供有关活动系统电源(AC 与 DC)的跟踪数据。 系统电源表
trace.UseSystemSleepData() 提供有关整体系统电源状态的跟踪数据。 电源转换表
trace.UseTargetCpuIdleStates() 提供有关目标 CPU C-state 的跟踪数据。 CPU 空闲状态表(类型为 Target 时)
trace.UseTargetProcessorFrequencyData() 提供有关目标处理器频率的跟踪数据。 处理器频率表(类型为 Target 时)
trace.UseThreads() 提供有关跟踪期间处于活动状态的线程的数据。 线程生存期表
trace.UseTraceStatistics() 提供有关跟踪中事件的统计信息。 系统配置、跟踪统计信息
trace.UseUtcData() 提供有关使用通用遥测客户端 (UTC) 的 Microsoft 遥测活动的跟踪数据。 Utc 表
trace.UseWindowInFocus() 提供有关焦点模式下活动 UI 窗口更改的跟踪数据。 焦点模式窗口表
trace.UseWindowsTracePreprocessorEvents() 提供跟踪中 Windows 软件跟踪预处理器 (WPP) 事件。 WPP 跟踪表;泛型事件表(事件类型为 WPP 时)
trace.UseWinINetData() 提供有关通过 Windows Internet (WinINet) 的 Internet 活动的跟踪数据。 下载详细信息表
trace.UseWorkingSetData() 提供有关每个进程或内核类别的工作集中的虚拟内存页的跟踪数据。 虚拟内存快照表

请参阅 ITraceSource 上的扩展方法以获取所有可用的跟踪数据,或者检查 IntelliSense 显示的“trace”中可用的方法。

后续步骤

在本概述中,你了解了如何使用 TraceProcessor 访问跟踪数据,以及其可访问的内置数据源。

下一步是了解如何扩展 TraceProcessor 以访问自定义跟踪数据。