TraceProcessing 库与 PerfView 使用的 TraceEvent 库相比如何?

How does the TraceProcessing library compare to the TraceEvent lIbrary used by PerfView?

似乎有很多不同的方法来处理解析 ETW 事件(TraceProcessing、TraceEvent、ETW2JSON 等)。我对 TraceProcessing 库和 TraceEvent 库之间的权衡特别感兴趣。

(我是 Microsoft 的一名开发人员,从事 TraceProcessor 项目。)

与 ETW2JSON 相比,我对 TraceEvent 更熟悉一些,但同样的答案适用于这两种情况。

每个都是由 Microsoft 内部的不同组织开发的,以最好地支持我们自己的性能和诊断调查。在某些情况下,我们从其他库中获取了 TraceProcessor 的设计灵感或线索,但主要是我们根据自己的设计理念为特定用例开发了它。

这些差异意味着每个库都有自己的性能原则,API design/consistency,以及基础广泛的 ETW 支持与开发良好的第一个 class 支持某些具体的东西。

TraceEvent 确实有 .NET/CLR 支持,但主要侧重于成为 C++ ETW API 的托管包装器。它确实支持其他事件,但非常有限。

总而言之,TraceEvent 非常适合第一个 class .NET/CLR 数据和其他地方的 "basics"。

TraceProcessor 为您可以在 XPerf 和 WPA 等其他工具中看到的系统类型和诊断数据提供强大的优先 class 支持。我们在整个库中推动了一个干净、一致、高性能的 API,并强调强类型以最自然的形式呈现每种类型的数据。