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

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

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

【问题讨论】:

    标签: c# .net performancecounter binary-data


    【解决方案1】:

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

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

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

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

    2. 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

      【讨论】:

        猜你喜欢
        • 2013-03-13
        • 1970-01-01
        • 2015-02-04
        • 2011-07-15
        • 1970-01-01
        • 1970-01-01
        • 2013-01-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多