The task is not to gather Performance counters data in my .NET app, but open already prepared binary log files (*.blg)?
I know that MS SQL Profiler (.NET app) can parse binary logs.
The task is not to gather Performance counters data in my .NET app, but open already prepared binary log files (*.blg)?
I know that MS SQL Profiler (.NET app) can parse binary logs.
From what I can find it seems that the .blg file format is proprietary and the spec is not openly published. That said I don't think you will be able to find a framework or library that does raw parsing of this format. Writing a library to parse this format without the spec is not without risk since assumptions will likely have to be made... even if you were to reverse engineer the binary format there is always the chance that you miss certain rules in your parser implementation causing potential problems down the road.
That said, I can think of 2 other options for parsing binary log files for use within a .NET application.
PowerShell's Import-Counter cmdlet could be used to import counter data from a blg file resulting in objects for each counter sample in the source. The resulting output can be used in a number of ways. The simplest example I can think of would be to convert your source to CSV format for further processing:
C:\PS> $data = import-counter .\exampledata.blg
C:\PS> $data | export-counter -path .\output.csv -FileFormat csv
relog is another option. This is a command line utility that ships with most major versions of the Windows OS. Again, the approach here would be to convert the blg file into CSV format for easy parsing. Example:
relog -f csv inputfile.blg -o outputFile.csv
Given the options above you should be able to go from there. It would be quite easy run powershell or relog from a C# program using Process.Start()
Tx (LINQ to Logs and Traces) is a C# library that can parse blg files.
And that is the usage:
var playback = new Playback();
playback.AddPerfCounterTraces(@"C:\bin\Release\Net40\BasicPerfCounters.blg");
playback
.GetObservable<PerformanceSample>()
.Dump();
playback.Run();
You can also find examples how to use it in Tx samples for LINQpad:
Microsoft has opened PowerShell source code, so now we can also find how to implement our own readers on top pdh.dll.
https://github.com/PowerShell/PowerShell/tree/master/src/Microsoft.PowerShell.Commands.Diagnostics
© 2022 - 2024 — McMap. All rights reserved.