11using System ;
22using BenchmarkDotNet . Attributes ;
33
4- namespace Parsers . Benchmarks
4+ namespace Parsers . Benchmarks ;
5+
6+ // ReSharper disable once InconsistentNaming
7+ [ MemoryDiagnoser ]
8+ public class ParserInvocation_Benchmark
59{
6- // ReSharper disable once InconsistentNaming
7- [ MemoryDiagnoser ]
8- public class ParserInvocation_Benchmark
9- {
10- private Func < string [ ] , Data > _emitIlParser ;
11- private Func < string [ ] , Data > _expressionTreeParser ;
12- private Func < string [ ] , Data > _reflectionParser ;
13- private Func < string [ ] , Data > _sigilParser ;
14- private Func < string [ ] , Data > _roslynParser ;
15- private Func < string [ ] , Data > _sourceGeneratorParser ;
10+ private Func < string [ ] , Data > _emitIlParser ;
11+ private Func < string [ ] , Data > _expressionTreeParser ;
12+ private Func < string [ ] , Data > _reflectionParser ;
13+ private Func < string [ ] , Data > _sigilParser ;
14+ private Func < string [ ] , Data > _roslynParser ;
15+ private Func < string [ ] , Data > _sourceGeneratorParser ;
1616
17- private static readonly string [ ] Input = { "one" , "1994-11-05T13:15:30" , "22" } ;
17+ private static readonly string [ ] Input = { "one" , "1994-11-05T13:15:30" , "22" } ;
1818
19- [ GlobalSetup ]
20- public void GlobalSetup ( )
21- {
22- _emitIlParser = new EmitIlParserFactory ( ) . GetParser < Data > ( ) ;
23- _expressionTreeParser = new ExpressionTreeParserFactory ( ) . GetParser < Data > ( ) ;
24- _reflectionParser = new ReflectionParserFactory ( ) . GetParser < Data > ( ) ;
25- _sigilParser = new SigilParserFactory ( ) . GetParser < Data > ( ) ;
26- _roslynParser = RoslynParserInitializer . CreateFactory ( ) . GetParser < Data > ( ) ;
27- // ReSharper disable once PossibleNullReferenceException
28- _sourceGeneratorParser = ( ( IParserFactory ) Activator . CreateInstance ( Type . GetType ( "BySourceGenerator.Parser" ) ) ) . GetParser < Data > ( ) ;
29- }
19+ [ GlobalSetup ]
20+ public void GlobalSetup ( )
21+ {
22+ _emitIlParser = new EmitIlParserFactory ( ) . GetParser < Data > ( ) ;
23+ _expressionTreeParser = new ExpressionTreeParserFactory ( ) . GetParser < Data > ( ) ;
24+ _reflectionParser = new ReflectionParserFactory ( ) . GetParser < Data > ( ) ;
25+ _sigilParser = new SigilParserFactory ( ) . GetParser < Data > ( ) ;
26+ _roslynParser = RoslynParserInitializer . CreateFactory ( ) . GetParser < Data > ( ) ;
27+ // ReSharper disable once PossibleNullReferenceException
28+ _sourceGeneratorParser = ( ( IParserFactory ) Activator . CreateInstance ( Type . GetType ( "BySourceGenerator.Parser" ) ) ) . GetParser < Data > ( ) ;
29+ }
3030
31- [ Benchmark ]
32- public Data EmitIl ( )
33- {
34- return _emitIlParser . Invoke ( Input ) ;
35- }
31+ [ Benchmark ]
32+ public Data EmitIl ( )
33+ {
34+ return _emitIlParser . Invoke ( Input ) ;
35+ }
3636
37- [ Benchmark ]
38- public Data ExpressionTree ( )
39- {
40- return _expressionTreeParser . Invoke ( Input ) ;
41- }
37+ [ Benchmark ]
38+ public Data ExpressionTree ( )
39+ {
40+ return _expressionTreeParser . Invoke ( Input ) ;
41+ }
4242
43- [ Benchmark ]
44- public Data Reflection ( )
45- {
46- return _reflectionParser . Invoke ( Input ) ;
47- }
43+ [ Benchmark ]
44+ public Data Reflection ( )
45+ {
46+ return _reflectionParser . Invoke ( Input ) ;
47+ }
4848
49- [ Benchmark ]
50- public Data Sigil ( )
51- {
52- return _sigilParser . Invoke ( Input ) ;
53- }
49+ [ Benchmark ]
50+ public Data Sigil ( )
51+ {
52+ return _sigilParser . Invoke ( Input ) ;
53+ }
5454
55- [ Benchmark ]
56- public Data Roslyn ( )
55+ [ Benchmark ]
56+ public Data Roslyn ( )
57+ {
58+ return _roslynParser . Invoke ( Input ) ;
59+ }
60+
61+ [ Benchmark ]
62+ public Data SourceGenerator ( )
63+ {
64+ return _sourceGeneratorParser . Invoke ( Input ) ;
65+ }
66+
67+ [ Benchmark ( Baseline = true ) ]
68+ public Data ManuallyWritten ( )
69+ {
70+ var data = new Data ( ) ;
71+ if ( 0 < Input . Length )
5772 {
58- return _roslynParser . Invoke ( Input ) ;
73+ data . Name = Input [ 0 ] ;
5974 }
60-
61- [ Benchmark ]
62- public Data SourceGenerator ( )
75+ if ( 1 < Input . Length && DateTime . TryParse ( Input [ 1 ] , out var bd ) )
6376 {
64- return _sourceGeneratorParser . Invoke ( Input ) ;
77+ data . Birthday = bd ;
6578 }
66-
67- [ Benchmark ( Baseline = true ) ]
68- public Data ManuallyWritten ( )
79+ if ( 2 < Input . Length && int . TryParse ( Input [ 2 ] , out var n ) )
6980 {
70- var data = new Data ( ) ;
71- if ( 0 < Input . Length )
72- {
73- data . Name = Input [ 0 ] ;
74- }
75- if ( 1 < Input . Length && DateTime . TryParse ( Input [ 1 ] , out var bd ) )
76- {
77- data . Birthday = bd ;
78- }
79- if ( 2 < Input . Length && int . TryParse ( Input [ 2 ] , out var n ) )
80- {
81- data . Number = n ;
82- }
83- return data ;
81+ data . Number = n ;
8482 }
83+ return data ;
8584 }
86- }
85+ }
0 commit comments