MeasureMap 3.0.0-RC22
See the version list below for details.
dotnet add package MeasureMap --version 3.0.0-RC22
NuGet\Install-Package MeasureMap -Version 3.0.0-RC22
<PackageReference Include="MeasureMap" Version="3.0.0-RC22" />
<PackageVersion Include="MeasureMap" Version="3.0.0-RC22" />
<PackageReference Include="MeasureMap" />
paket add MeasureMap --version 3.0.0-RC22
#r "nuget: MeasureMap, 3.0.0-RC22"
#:package MeasureMap@3.0.0-RC22
#addin nuget:?package=MeasureMap&version=3.0.0-RC22&prerelease
#tool nuget:?package=MeasureMap&version=3.0.0-RC22&prerelease
MeasureMap
Profiling and Benchmarking .NET Code made simple
MeasureMap allows profiling and benchmarking from simple code fragments to full applications.
Visit https://wickedflame.github.io/MeasureMap/ for the full documentation.
MeasureMap uses the builder pattern and a fluent API to make profiling or benchmarking as simple as possible.
Profiling
The Builder for profiling is initiated with the ProfilerSession when running the StartSession method.
var result = ProfilerSession.StartSession()
.Task(() =>
{
// This represents the Task that needs testint
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(0.001));
})
.SetIterations(200)
.Assert(pr => pr.Iterations.Count() == 1)
.RunSession();
result.Trace();
Assert.IsTrue(result.AverageMilliseconds < 20);
RunSession executes the profiler for the registered Task.
Benchmarking
Benchmarks are basically just multiple Profiler-Sessions that are run in one Session.
The Benchmarks are registered to and executed by the BenchmarkRunner.
Benchmarks can be run in two ways
- FluentAPI
- Attributes
FluentAPI
var sha256 = SHA256.Create();
var md5 = MD5.Create();
var data = new byte[10000];
new Random(42).NextBytes(data);
var runner = new BenchmarkRunner();
runner.SetIterations(10);
runner.Task("sha256", () => sha256.ComputeHash(data));
runner.Task("md5", () => md5.ComputeHash(data));
var result = runner.RunSessions();
result.Trace();
Attributes
[Iterations(10)]
[Threads(10)]
//[Duration(10)]
[RunWarmup(false)]
public class WorkflowBenchmark
{
private readonly SHA256 _sha256;
private readonly MD5 _md5;
private readonly byte[] _data;
public WorkflowBenchmark()
{
_sha256 = SHA256.Create();
_md5 = MD5.Create();
_data = new byte[10000];
new Random(42).NextBytes(_data);
}
[OnStartPipeline]
public void Setup()
{
}
[OnEndPipeline]
public void End()
{
}
[Benchmark]
public void sha256()
{
// Simulate some work
_sha256.ComputeHash(_data);
}
[Benchmark]
public void md5(IExecutionContext ctx)
{
// Simulate some work
_md5.ComputeHash(_data);
}
}
[Test]
public void WorkflowTest_Benchmark()
{
var runner = new BenchmarkRunner();
var result = runner.RunSession<WorkflowBenchmark>();
result.Trace();
}
Tracing the Result
The result is by default traced as Markdown
### MeasureMap Benchmark
Iterations: 10
#### Summary
| Name | Avg Time | Avg Ticks | Total | Fastest | Slowest | Memory Increase |
|------- |----------------: |---------: |----------------: |-------: |-------: |---------------: |
| sha256 | 00:00:00.0000924 | 924 | 00:00:00.0009243 | 776 | 1471 | 1392 |
| md5 | 00:00:00.0000485 | 485 | 00:00:00.0004858 | 409 | 534 | 1392 |
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
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-RC48 | 173 | 8/27/2025 |
3.0.0-RC22 | 216 | 8/7/2025 |
2.4.0 | 276 | 6/5/2025 |
2.3.2 | 170 | 5/6/2025 |
2.3.1 | 130 | 5/2/2025 |
2.2.1 | 1,042 | 1/30/2023 |
2.2.0 | 731 | 12/19/2022 |
2.1.0 | 799 | 10/31/2022 |
2.0.2 | 791 | 10/20/2022 |
2.0.1 | 815 | 9/28/2022 |
2.0.0 | 868 | 9/5/2022 |
1.7.0 | 998 | 2/22/2022 |
1.6.2 | 984 | 3/31/2021 |
1.6.1 | 879 | 3/23/2021 |
1.6.0 | 1,092 | 5/19/2020 |
1.5.2 | 1,017 | 5/6/2020 |
1.5.1 | 1,008 | 4/21/2020 |
1.5.0 | 1,003 | 4/20/2020 |
1.4.0.17 | 1,164 | 11/29/2019 |
1.3.0 | 1,001 | 11/27/2019 |
1.2.2 | 1,737 | 6/12/2018 |
1.2.1 | 1,773 | 4/25/2018 |
1.2.0 | 1,589 | 4/19/2018 |
1.1.0 | 1,750 | 4/17/2018 |
1.0.0 | 1,560 | 4/11/2018 |
0.2.0 | 1,573 | 4/11/2018 |