1+ [ MemoryDiagnoser ]
2+ [ SimpleJob ( iterationCount : 10 , warmupCount : 3 ) ]
3+ public class FilterLinesBenchmarks
4+ {
5+ StringBuilder smallInput = null ! ;
6+ StringBuilder mediumInput = null ! ;
7+ StringBuilder largeInput = null ! ;
8+
9+ [ GlobalSetup ]
10+ public void Setup ( )
11+ {
12+ // Small: ~1KB, 20 lines
13+ smallInput = CreateTestData ( 20 , 50 ) ;
14+
15+ // Medium: ~50KB, 1000 lines
16+ mediumInput = CreateTestData ( 1000 , 50 ) ;
17+
18+ // Large: ~500KB, 10000 lines
19+ largeInput = CreateTestData ( 10000 , 50 ) ;
20+ }
21+
22+ static StringBuilder CreateTestData ( int lineCount , int charsPerLine )
23+ {
24+ var builder = new StringBuilder ( ) ;
25+ for ( var i = 0 ; i < lineCount ; i ++ )
26+ {
27+ builder . Append ( new string ( 'x' , charsPerLine ) ) ;
28+ builder . Append ( i ) ;
29+ builder . AppendLine ( ) ;
30+ }
31+ return builder ;
32+ }
33+
34+ // Remove every other line
35+ static bool RemoveEvenLines ( string line ) =>
36+ line . Length > 0 && char . IsDigit ( line [ ^ 1 ] ) && ( line [ ^ 1 ] - '0' ) % 2 == 0 ;
37+
38+ [ Benchmark ( Baseline = true ) ]
39+ public void Small ( )
40+ {
41+ var builder = new StringBuilder ( smallInput . ToString ( ) ) ;
42+ builder . FilterLines ( RemoveEvenLines ) ;
43+ }
44+
45+ [ Benchmark ]
46+ public void Medium ( )
47+ {
48+ var builder = new StringBuilder ( mediumInput . ToString ( ) ) ;
49+ builder . FilterLines ( RemoveEvenLines ) ;
50+ }
51+
52+ [ Benchmark ]
53+ public void Large ( )
54+ {
55+ var builder = new StringBuilder ( largeInput . ToString ( ) ) ;
56+ builder . FilterLines ( RemoveEvenLines ) ;
57+ }
58+ }
0 commit comments