Skip to content
This repository has been archived by the owner on Feb 18, 2023. It is now read-only.

A source generator for generating a faster extension method for converting an enumeration value to string.

License

Notifications You must be signed in to change notification settings

petarpetrovt/fast-enum-string

Repository files navigation

fast-enum-string

Build and test CodeQL codecov NuGet License Contributors stargazers

A source generator for generating ToStringFast extension method.

Enum declaration:

public enum TestEnum
{
    Test1,
    Test2,
}

Generated code:

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));
        }
    }
}

Benchmarks

Small enumeration (2 values)

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 -

Large enumeration (1000 values)

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

License

License

Contributors

Contributors

Made with contributors-img.

About

A source generator for generating a faster extension method for converting an enumeration value to string.

Resources

License

Stars

Watchers

Forks

Languages