是否有任何 C# 框架或代码来解析 *blg 性能计数器日志文件?

Posted

技术标签:

【中文标题】是否有任何 C# 框架或代码来解析 *blg 性能计数器日志文件?【英文标题】:Is there any C# framework or code to parse *blg Perfomance Counter log files? 【发布时间】:2010-12-09 09:08:24 【问题描述】:

任务不是在我的 .NET 应用程序中收集性能计数器数据,而是打开已经准备好的二进制日志文件 (*.blg)?

我知道 MS SQL Profiler (.NET app) 可以解析二进制日志。

【问题讨论】:

【参考方案1】:

据我所知,.blg 文件格式似乎是专有的,规范并未公开发布。也就是说,我认为您无法找到对这种格式进行原始解析的框架或库。在没有规范的情况下编写一个库来解析这种格式并非没有风险,因为可能必须做出假设......即使你要对二进制格式进行逆向工程,你也总是有可能错过解析器实现中的某些规则,从而导致未来的潜在问题。

也就是说,我可以想到 2 个其他选项来解析二进制日志文件以在 .NET 应用程序中使用。

    PowerShell 的Import-Counter cmdlet 可用于从 blg 文件导入计数器数据,从而为源中的每个计数器样本生成对象。可以通过多种方式使用生成的输出。我能想到的最简单的例子是将您的源代码转换为 CSV 格式以进行进一步处理:

    C:\PS> $data = import-counter .\exampledata.blgC:\PS> $data | export-counter -path .\output.csv -FileFormat csv

    relog 是另一种选择。这是大多数主要版本的 Windows 操作系统附带的命令行实用程序。同样,这里的方法是将 blg 文件转换为 CSV 格式以便于解析。示例:

    relog -f csv inputfile.blg -o outputFile.csv

鉴于上述选项,您应该可以从那里开始。使用 Process.Start() 从 C# 程序运行 powershell 或重新登录将非常容易

【讨论】:

【参考方案2】:

Tx (LINQ to Logs and Traces)是一个可以解析blg文件的C#库。

这就是用法:

var playback = new Playback();

playback.AddPerfCounterTraces(@"C:\bin\Release\Net40\BasicPerfCounters.blg");

playback
    .GetObservable<PerformanceSample>()
    .Dump();

playback.Run();

您还可以在 LINQpad 的 Tx 示例中找到如何使用它的示例:

【讨论】:

谢谢你的提示,我会试试的。T(hn)x。 Linqpad 示例必须在 LINQPad 5 中手动下载,单击示例窗格按钮上的下载/导入示例按钮。【参考方案3】:

微软已经开放了 PowerShell 源代码,所以现在我们也可以在上面的 pdh.dll 上找到如何实现我们自己的阅读器。

https://github.com/PowerShell/PowerShell/tree/master/src/Microsoft.PowerShell.Commands.Diagnostics

【讨论】:

以上是关于是否有任何 C# 框架或代码来解析 *blg 性能计数器日志文件?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以动态编译和执行 C# 代码片段?

桌面应用程序:架构框架?

性能监视器:用户定义的数据收集器集路径

在构建 C# 控制台应用程序时,是不是有任何库/框架/应用程序块来标准化重复性任务? [复制]

需要帮助来解析复杂的 JSON

json解析失败怎么解决?