【发布时间】:2020-04-22 19:32:01
【问题描述】:
似乎有很多不同的方法来处理解析 ETW 事件(TraceProcessing、TraceEvent、ETW2JSON 等)。我对 TraceProcessing 库和 TraceEvent 库之间的权衡特别感兴趣。
- 它们是否适用于不同的用例?
- TraceProcessing 是作为 TraceEvent 的后续还是演变而来的?
- 为什么要选择 TraceProcessing 库而不是 TraceEvent 库?
【问题讨论】:
似乎有很多不同的方法来处理解析 ETW 事件(TraceProcessing、TraceEvent、ETW2JSON 等)。我对 TraceProcessing 库和 TraceEvent 库之间的权衡特别感兴趣。
【问题讨论】:
(我是 Microsoft 的一名开发人员,从事 TraceProcessor 项目。)
我对 TraceEvent 比对 ETW2JSON 更熟悉一些,但相同的答案适用于这两种情况。
每个都是由 Microsoft 内部的不同组织开发的,以最好地支持我们自己的性能和诊断调查。在某些情况下,我们从其他库中获取 TraceProcessor 的设计灵感或线索,但主要是针对我们的特定用例并根据我们自己的设计理念开发的。
这些差异意味着每个库在性能、API 设计/一致性和广泛的 ETW 支持方面都有自己的原则,而对某些特定事物的良好开发的一流支持。
TraceEvent 确实支持 .NET/CLR,但主要侧重于作为 C++ ETW API 的管理包装器。它确实支持其他事件,但非常有限。
总而言之,TraceEvent 非常适合一流的 .NET/CLR 数据和其他地方的“基础”。
TraceProcessor 为您可以在 XPerf 和 WPA 等其他工具中看到的系统和诊断数据类型提供强大的一流支持。我们在整个库中推动了一个干净、一致、高性能的 API,并强调强类型以最自然的形式呈现每种类型的数据。
【讨论】: