A source generator for generating ToStringFast
extension method.
public enum TestEnum
{
Test1,
Test2,
}
public static class TestEnum_FastEnumString
{
public static string ToStringFast(this TestEnum value)
{
switch(value)
{
case TestEnum.Test1: return nameof(TestEnum.Test1);
case TestEnum.Test2: return nameof(TestEnum.Test2);
default:
throw new System.ArgumentException($"TestEnum value `{value}` is not supported in this context.", nameof(value));
}
}
}
BenchmarkDotNet=v0.13.1, OS=Windows 10.0.19043.1165 (21H1/May2021Update)
AMD Ryzen 7 3700X, 1 CPU, 16 logical and 8 physical cores
.NET SDK=6.0.100-preview.7.21379.14
[Host] : .NET 5.0.9 (5.0.921.35908), X64 RyuJIT
.NET 5.0 : .NET 5.0.9 (5.0.921.35908), X64 RyuJIT
.NET 6.0 : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
Method | Job | Runtime | Mean | Error | StdDev | Gen 0 | Code Size | Allocated |
---|---|---|---|---|---|---|---|---|
ToStringOriginal | .NET 5.0 | .NET 5.0 | 26.2394 ns | 0.0714 ns | 0.0633 ns | 0.0029 | 107 B | 24 B |
ToStringFast | .NET 5.0 | .NET 5.0 | 1.1341 ns | 0.0098 ns | 0.0092 ns | - | 50 B | - |
ToStringOriginal | .NET 6.0 | .NET 6.0 | 16.5660 ns | 0.1791 ns | 0.1588 ns | 0.0029 | 758 B | 24 B |
ToStringFast | .NET 6.0 | .NET 6.0 | 0.7052 ns | 0.0100 ns | 0.0093 ns | - | 50 B | - |
BenchmarkDotNet=v0.13.1, OS=Windows 10.0.19043.1165 (21H1/May2021Update)
AMD Ryzen 7 3700X, 1 CPU, 16 logical and 8 physical cores
.NET SDK=6.0.100-preview.7.21379.14
[Host] : .NET 5.0.9 (5.0.921.35908), X64 RyuJIT
.NET 5.0 : .NET 5.0.9 (5.0.921.35908), X64 RyuJIT
.NET 6.0 : .NET 6.0.0 (6.0.21.37719), X64 RyuJIT
Method | Job | Runtime | Mean | Error | StdDev | Gen 0 | Code Size | Gen 1 | Allocated |
---|---|---|---|---|---|---|---|---|---|
ToStringOriginal | .NET 5.0 | .NET 5.0 | 37.326 ns | 0.1020 ns | 0.0955 ns | 0.0029 | 107 B | 0.0005 | 24 B |
ToStringFast | .NET 5.0 | .NET 5.0 | 1.183 ns | 0.0069 ns | 0.0061 ns | - | 18,019 B | - | - |
ToStringOriginal | .NET 6.0 | .NET 6.0 | 29.923 ns | 0.1675 ns | 0.1399 ns | 0.0029 | 758 B | 0.0005 | 24 B |
ToStringFast | .NET 6.0 | .NET 6.0 | 1.368 ns | 0.0208 ns | 0.0195 ns | - | 18,019 B | - | - |
Made with contributors-img.