【发布时间】:2023-03-20 21:55:01
【问题描述】:
任务不是在我的 .NET 应用程序中收集性能计数器数据,而是打开已经准备好的二进制日志文件 (*.blg)?
我知道 MS SQL Profiler (.NET app) 可以解析二进制日志。
【问题讨论】:
标签: c# .net performancecounter binary-data
任务不是在我的 .NET 应用程序中收集性能计数器数据,而是打开已经准备好的二进制日志文件 (*.blg)?
我知道 MS SQL Profiler (.NET app) 可以解析二进制日志。
【问题讨论】:
标签: c# .net performancecounter binary-data
据我所知,.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 或重新登录将非常容易
【讨论】:
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 示例中找到如何使用它的示例:
【讨论】:
微软已经开放了 PowerShell 源代码,所以现在我们也可以在上面的 pdh.dll 上找到如何实现我们自己的阅读器。
https://github.com/PowerShell/PowerShell/tree/master/src/Microsoft.PowerShell.Commands.Diagnostics
【讨论】: