|
[MemoryDiagnoser] |
|
public class EnumParserBenchNonFlagGenerated |
|
{ |
|
public enum DayOfWeek : byte |
|
{ |
|
None , |
|
Monday, |
|
Tuesday, |
|
Wednesday, |
|
Thursday, |
|
Friday, |
|
Saturday, |
|
Sunday, |
|
} |
|
|
|
public static string[] AllEnums = |
|
Enumerable.Range(0, 50).Select(i => ((DayOfWeek)i).ToString("G").Replace(" ", "")).ToArray(); |
|
|
|
private static readonly ITransformer<DayOfWeek> _parser = TextTransformer.Default.GetTransformer<DayOfWeek>(); |
|
|
|
|
|
[Benchmark(Baseline = true)] |
|
public DayOfWeek EnumTransformer() |
|
{ |
|
DayOfWeek current = default; |
|
for (int i = AllEnums.Length - 1; i >= 0; i--) |
|
{ |
|
var text = AllEnums[i]; |
|
current = _parser.Parse(text.AsSpan()); |
|
} |
|
return current; |
|
} |
|
|
|
[Benchmark] |
|
public DayOfWeek Generated() |
|
{ |
|
DayOfWeek current = default; |
|
for (int i = AllEnums.Length - 1; i >= 0; i--) |
|
{ |
|
var text = AllEnums[i]; |
|
current = ParseIgnoreCase(text); |
|
} |
|
return current; |
|
} |
|
|
|
private static DayOfWeek ParseIgnoreCase(string text) => |
|
text switch |
|
{ |
|
{ } s when s.Equals(nameof(DayOfWeek.None), StringComparison.OrdinalIgnoreCase) => DayOfWeek.None, |
|
{ } s when s.Equals(nameof(DayOfWeek.Monday), StringComparison.OrdinalIgnoreCase) => DayOfWeek.Monday, |
|
{ } s when s.Equals(nameof(DayOfWeek.Tuesday), StringComparison.OrdinalIgnoreCase) => DayOfWeek.Tuesday, |
|
{ } s when s.Equals(nameof(DayOfWeek.Wednesday), StringComparison.OrdinalIgnoreCase) => DayOfWeek.Wednesday, |
|
{ } s when s.Equals(nameof(DayOfWeek.Thursday), StringComparison.OrdinalIgnoreCase) => DayOfWeek.Thursday, |
|
{ } s when s.Equals(nameof(DayOfWeek.Friday), StringComparison.OrdinalIgnoreCase) => DayOfWeek.Friday, |
|
{ } s when s.Equals(nameof(DayOfWeek.Saturday), StringComparison.OrdinalIgnoreCase) => DayOfWeek.Saturday, |
|
{ } s when s.Equals(nameof(DayOfWeek.Sunday), StringComparison.OrdinalIgnoreCase) => DayOfWeek.Sunday, |
|
_ => Enum.Parse<DayOfWeek>(text, true) |
|
}; |
|
} |