学习TraceLogging事件,使用ETW记录,并使用WPA捕获和分析跟踪

优化响应行为的交互

下载WINDOWS评估和部署工具包 (Windows ADK)

保持默认安装

驱动延迟优化的基本步骤包括:

  1. 定义方案并添加 TraceLogging 事件。TraceLogging 是用于日志记录事件的系统,无需清单即可解码,TraceLogging基于windows事件跟踪(ETW),并提供检测代码的简化办法。C#可选的有.NET EventSource类,WinRT有LoggingChannel,社区支持的TraceLoggingDynamic。
  2. 根据交互类设置目标,用户对应用的性能和响应能力有不同的期望。
  3. 若要检查特定交互的确切持续时间,可以使用 Windows 性能分析器 (WPA) 捕获和分析跟踪。
  4. 分析跟踪并查找改进机会。

学习使用TraceLogging

  1. 创建EventSource,创建 EventSource 类的实例。 第一个构造函数参数标识此提供程序的名称。

    private static EventSource log = new EventSource("TraceLoggingProvider");
    

    实例标注为静态,因为一次应用程序中只有一个特定提供程序的一个实例。

  2. 日志TraceLogging事件

    log.Write("Event 1");
    
    log.Write("Event 2", new { someEventData = DateTime.Now });
    
    ExampleStructuredData EventData = new ExampleStructuredData() { TransactionID = 1234, TransactionDate = DateTime.Now };
    log.Write("Event 3", EventData); 
    
    [EventData]  
    public sealed class ExampleStructuredData
    {
       public int TransactionID { get; set; }
       public DateTime TransactionDate { get; set; }
    }
    

    注意下面的
    这个Name是你的提供程序记录事件。

    1. 把下面的文件保存成.WPRP后缀,名字随便起。
    <?xml version="1.0" encoding="utf-8"?>
    <!-- TODO: 
    1. Find and replace "TraceLoggingProvider" with the name of your provider.
    2. See TODO below to update GUID for your event provider
    -->
    <WindowsPerformanceRecorder Version="1.0" Author="Microsoft Corporation" Copyright="Microsoft Corporation" Company="Microsoft Corporation">
     <Profiles>
       <EventCollector Id="EventCollector_TraceLoggingProvider" Name="TraceLoggingProvider">
         <BufferSize Value="64" />
         <Buffers Value="4" />
       </EventCollector>
    
       <!-- TODO:
       1. Update Name attribute in EventProvider xml element with your provider GUID, eg: Name="0205c616-cf97-5c11-9756-56a2cee02ca7". Or
          if you specify an EventSource C# provider or call TraceLoggingRegister(...) without a GUID, use star (*) before your provider
          name, eg: Name="*MyEventSourceProvider" which will enable your provider appropriately.
       2. This sample lists one EventProvider xml element and references it in a Profile with EventProviderId xml element.
          For your component wprp, enable the required number of providers and fix the Profile xml element appropriately
       -->
       <EventProvider Id="EventProvider_TraceLoggingProvider" Name="*TraceLoggingProvider" />
    
       <Profile Id="TraceLoggingProvider.Verbose.File" Name="TraceLoggingProvider" Description="TraceLoggingProvider" LoggingMode="File" DetailLevel="Verbose">
         <Collectors>
           <EventCollectorId Value="EventCollector_TraceLoggingProvider">
             <EventProviders>
               <!-- TODO:
               1. Fix your EventProviderId with Value same as the Id attribute on EventProvider xml element above
               -->
               <EventProviderId Value="EventProvider_TraceLoggingProvider" />
             </EventProviders>
           </EventCollectorId>
         </Collectors>
       </Profile>
    
       <Profile Id="TraceLoggingProvider.Light.File" Name="TraceLoggingProvider" Description="TraceLoggingProvider" Base="TraceLoggingProvider.Verbose.File" LoggingMode="File" DetailLevel="Light" />
       <Profile Id="TraceLoggingProvider.Verbose.Memory" Name="TraceLoggingProvider" Description="TraceLoggingProvider" Base="TraceLoggingProvider.Verbose.File" LoggingMode="Memory" DetailLevel="Verbose" />
       <Profile Id="TraceLoggingProvider.Light.Memory" Name="TraceLoggingProvider" Description="TraceLoggingProvider" Base="TraceLoggingProvider.Verbose.File" LoggingMode="Memory" DetailLevel="Light" />
    
     </Profiles>
    </WindowsPerformanceRecorder>
    
    1. 打开CMD使用管理员进入到你保存XML的路径启动wpr.exe

"C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\WPR.exe" -start MyEventSourceProvider.WPRP
5. 允许包含事件的应用程序。
6. 停止跟踪捕获
"C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\WPR.exe" -stop TraceCaptureFile.etl description

使用windows 性能分析器查看TracLogging数据

在刚才的目录下生成一个.etl文件,WPA是目前唯一可以查看TracLogging文件的查看器

  1. 启动WPA, 加载文件
    "C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\WPA.exe" TraceCaptureFile.etl
  2. 查看提供程序事件。在WPA图形资源管理器中,展开“系统活动(System Activity)”。
  3. 双击“泛型事件(Generic Events)”中的分析窗格中的事件。
  4. 在分析窗格中,找到提供程序的事件,验证TraceLogging是否正常工作。
Microsoft Windows [版本 10.0.22621.1555]
(c) Microsoft Corporation。保留所有权利。

C:\Users\Administrator>cd D:\WinUI3\TraceLogging

C:\Users\Administrator>d:

D:\WinUI3\TraceLogging>"C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\WPR.exe" -start MyEventSourceProvider.WPRP

D:\WinUI3\TraceLogging>"C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\WPR.exe" -stop TraceCaptureFile.etl description

D:\WinUI3\TraceLogging>"C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\WPA.exe" TraceCaptureFile.etl
  1. 在分析窗口中,可以看到我们创建的TraceLoggingProvider的Event1、Event2、Event3。

图床不能用了。没有图了,自己测试一下就好了。

后续的资料。
Windows 性能分析器 | Microsoft Learn

原文链接:https://www.cnblogs.com/duwenlong/p/17354389.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:学习TraceLogging事件,使用ETW记录,并使用WPA捕获和分析跟踪 - Python技术站

(0)
上一篇 2023年4月30日
下一篇 2023年4月30日

相关文章

  • C#并行编程之数据并行Tasks.Parallel类

    C#并行编程之数据并行Tasks.Parallel类 什么是数据并行 数据并行是并行编程中的一种模式,它的目的是对一个非常大的数据集进行并行处理。为了实现数据并行,可以将数据划分成多个部分,然后在多个处理器(或者CPU核心)上同时处理这些部分。每个处理器/核心都处理同一份代码,但是处理的数据不同。 Tasks.Parallel类 .NET Framework…

    C# 2023年5月15日
    00
  • aspnet_isapi.dll设置图文方法.net程序实现伪静态

    下面我将为您详细讲解“aspnet_isapi.dll设置图文方法.net程序实现伪静态”的完整攻略。 什么是ASP.NET伪静态? ASP.NET伪静态,简单说就是通过修改URL结构来优化网站,让搜索引擎更好地抓取和检索。原始URL包含参数和动态标识,而ASP.NET伪静态通过修改URL结构,将参数转换为目录形式,将动态标识转换为静态标识,从而实现网页地址…

    C# 2023年6月6日
    00
  • C#实现简单订单管理程序

    C#实现简单订单管理程序攻略 订单管理程序是一个基本的软件开发任务,通过它我们可以练习C#类和对象,掌握基本的输入输出、判断和运算等编程技巧。下面将详细讲解如何使用C#实现一个简单的订单管理程序。 步骤一:定义订单类 首先,我们需要定义一个订单类,用于表示一个订单。订单有一个唯一的标识符、一个客户信息、一个订单日期以及一组订单项。定义订单类的代码如下: pu…

    C# 2023年6月6日
    00
  • c#预处理指令分析

    下面是C#预处理指令分析的完整攻略: 1. 什么是C#预处理指令? 在C#中,预处理指令是在代码编译阶段执行的指令。它们用于告诉编译器在编译代码之前执行一些操作,例如在代码中插入一些代码、定义一些符号或在代码中包含其他文件等。 C#中的预处理指令以“#”开头,并且只能出现在代码文件的最顶部。一些常用的预处理指令包括:#define、#if、#else、#en…

    C# 2023年5月14日
    00
  • C#数组应用分析第2/2页

    C#数组应用分析攻略 什么是数组 数组是一种数据结构,它是相同数据类型的一组元素的集合。数组中的元素通过使用数组下标进行访问。C#中的数组是由系统分配的内存块。数组中的元素在内存中是连续排列的。 数组的声明 在C#中,可以通过以下方式声明一个数组: // 声明一个int类型的数组,长度为4 int[] numbers = new int[4]{1, 2, 3…

    C# 2023年6月3日
    00
  • 在C# 8中如何使用默认接口方法详解

    当在一个现有的接口中添加新的成员时,会面临着兼容性问题,因为所有使用该接口的实现类都需要进行相应的修改。针对这种情况,C# 8推出了接口的默认实现方法的特性。通过默认实现方法,接口的作者可以为接口提供新功能,而无需破坏面向对象设计中的接口整体抽象性原则。 一、默认接口方法的定义 默认接口方法的定义与普通接口方法一致,不同的在于将其实现体嵌入在接口定义之中,并…

    C# 2023年6月6日
    00
  • C#实现动态创建接口并调用的实例

    在C#中,动态创建接口并调用是一种常见的编程模式,它可以帮助开发者实现更加灵活和可扩展的代码结构。在本攻略中,我们将介绍如何使用C#实现动态创建接口并调用,并提供两个示例来说明其用法。 以下是两个示例,介绍如何使用C#实现动态创建接口并调用: 示例一:使用Reflection.Emit动态创建接口并调用 首先,我们需要引入System.Reflection.…

    C# 2023年5月15日
    00
  • 关系型数据库和非关系型数据库概述与优缺点对比

    关系型数据库和非关系型数据库概述与优缺点对比 概述 关系型数据库和非关系型数据库是两种不同的数据库类型。关系型数据库是指使用关系模型来组织数据的数据库,而非关系型数据库则是指使用其他数据模型来组织数据的数据库。关系型数据库最常见的代表是 MySQL、Oracle、SQL Server 等,而非关系型数据库最常见的代表是 MongoDB、Redis、Cassa…

    C# 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部