性能计数器与 ETW

标签 performance performancecounter etw

性能计数器是 ETW 的一部分吗?如果不是,两者有什么区别?

最佳答案

性能计数器和 ETW 是不同的技术。性能计数器不通过 ETW 公开。

基本区别:性能计数器提供有关系统行为的高级度量(想想计时器和读取的字节以及分配的对象),而 ETW 是一个诊断跟踪和日志记录工具(想想 Debug.WriteLine 消息,但更丰富和更有条理)。

目前,ETW 和性能计数器都得到了 Windows 的全面支持,作为开发人员,您可以编写代码来为这两种技术生成和使用数据。

性能计数器

Performance counters ,也称为 PDH(性能数据助手)计数器,是简单的数字指标,可为您提供特定系统行为方式的高级摘要。例如,% Processor Time是一个性能计数器,它告诉您有多少处理器时间用于执行用户模式代码。作为一个更复杂的例子,# of Methods Jitted.NET CLR Jit category 告诉您自应用程序启动以来 JIT 编译了多少 .NET 方法。

性能计数器通常用于监控系统运行状况和诊断特定的性能问题。当出现严重错误时,它们是问题的一个很好的指标,但它们并没有为您提供有关特定问题发生原因的详细信息。

要查看 Windows 性能计数器,您只需运行 perfmon .在 Vista+ 上,您可能需要单击“性能监视器”节点才能查看计数器图表。要以编程方式访问性能计数器,请查看 System.Diagnostics.PerformanceCounter .NET 中的类或 PDH library对于 native 代码。

Windows 事件跟踪 (ETW)

ETW 是内置于 Windows 中的跟踪系统。本质上,任何组件(例如用户应用程序,甚至 Windows 内核本身)都可以发送有关组件关心的特定事件的诊断跟踪信息。例如,当进程启动和停止、加载和卸载镜像(例如 DLL)时、创建或销毁线程时,甚至当线程进行上下文切换时,内核都会发送 ETW 事件。记录的数据采用组件在其他地方描述的序列化格式,允许诊断工具读取和理解 session 期间记录的 ETW 事件。见 here获取有关一切如何协同工作的框线图。

ETW 旨在快速,并且在未启用日志记录时不应对系统性能产生重大影响。从 Vista 开始,ETW 在整个 Windows 中无处不在,旨在供应用程序开发人员使用(具体来说,您的应用程序可以是记录事件的 ETW 提供程序)。 ETW 是事件日志的基础,可供性能分析器、调试器或系统监视器使用。

请参阅我的其他 SO 帖子 here有关与 ETW 接口(interface)的一些资源。

关于性能计数器与 ETW,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4864576/

相关文章:

java - 使用四个规则之一对列表进行排序的最佳实践

c++ - 在 C++ 中复制和操作大型密集二维数组的最快方法是什么

php - file_get_contents 或 fopen 用于读取几 MB 的 php ://input?

asp.net - 如何检索当前 asp.net 应用程序的性能计数器

windows - 警告 - 运行 wevtutil 时无法访问提供程序资源

java - 什么时候考虑 Java 中的代码效率?

c# - 如何使用文本框、进度条和性能计数器的值进行计算? C#

performancecounter - perf 脚本输出的含义是什么?

logparser - 将 Logparser.exe 与 .etl 文件一起使用 - 无法检索高分辨率时间戳

c# - 如何使用 TraceEvent 库捕获进程名称?