ETWAnalyzer 3.0.0.2

dotnet add package ETWAnalyzer --version 3.0.0.2
NuGet\Install-Package ETWAnalyzer -Version 3.0.0.2
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ETWAnalyzer" Version="3.0.0.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add ETWAnalyzer --version 3.0.0.2
#r "nuget: ETWAnalyzer, 3.0.0.2"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install ETWAnalyzer as a Cake Addin
#addin nuget:?package=ETWAnalyzer&version=3.0.0.2

// Install ETWAnalyzer as a Cake Tool
#tool nuget:?package=ETWAnalyzer&version=3.0.0.2

Programatic Access to Extracted Data

The IETWExtract interface gives you access to all deserialized data of an extracted Json file in a cohesive object oriented object model. Since ETWAnalyzer was built initially for mass data analysis of automated tests you need to start with a TestRunData instance which gets as input a directory or a Json file. From there you can then query the TestRuns or all contained files. Each TestDataFile has if it adheres to the naming convention the

  • TestCase Name
  • Measured Duration
  • Time when it was taken
  • Machine Name
  • Client/Server
  • Test Status

This is all encoded into the file name which is very fast to query without the need to open any json file. When you want to examine the contents of a Json file you can access of a TestDataFile its Extract property which will deserialize the Json file.

using ETWAnalyzer.Extract;
using ETWAnalyzer.ProcessTools;
using System.Collections.Generic;
using System.Linq;

namespace AutoQuery
{
    internal class Program
    {
        static void Main(string[] args)
        {
            TestRunData data = new TestRunData(args[0]); // read file or a directory with tests
            foreach(TestDataFile test in data.AllFiles)  
            {
                IETWExtract extract = test.Extract; // read Json data
                foreach(KeyValuePair<ProcessKey,uint> topn in extract.CPU.PerProcessCPUConsumptionInMs.Take(10))
                {
                    ColorConsole.WriteEmbeddedColorLine($"[green]{topn.Value,-6} ms[/green] [yellow]{topn.Key,-50}[/yellow]");
                }

            }
        }
    }
}

This very simple application gives you already the top 10 CPU consumers of a file or a directory of files:

alternate text is missing from this package README image

Below is the class Diagram of IETWExtract

alternate text is missing from this package README image

Scalable Json

The main goal of ETWAnalyzer is to make profiling data queryable in a quick manner. On the other hand many additional extractors can be added in the future. If the queried data is small it can be directly added to the main Json extract file. But if the data can be large, such as FILEIO data which records every touched file operation it can become pretty large. To prevent that performance hit a simple way out was chosen. During serialization for potentially large data extracts a different file is used which contains the suffix _Derived_xxxx.json

alternate text is missing from this package README image

These derived files are accessed only when you touch e.g. the FileIO data property. That way we can evolve over time many more extractors with different goals without sacrificing query speed for common things.

Product Compatible and additional computed target framework versions.
.NET net8.0-windows7.0 is compatible. 
.NET Framework net48 is compatible.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
3.0.0.2 107 2/5/2024
3.0.0.1 69 1/30/2024
2.5.15 154 12/7/2023
2.5.14 131 10/6/2023
2.5.13 86 9/26/2023
2.5.11 131 7/26/2023
2.5.8 260 3/23/2023
2.5.5 268 2/2/2023
2.5.3 254 12/23/2022
2.5.2 316 11/8/2022
2.5.1 293 11/8/2022
2.5.0 343 11/3/2022
2.3.3-Preview 113 7/25/2022
2.2.0.4 394 5/9/2022
2.2.0.3 386 5/3/2022
2.2.0.1 382 4/19/2022
2.2.0 374 3/21/2022