99using System . Reflection . Metadata . Ecma335 ;
1010using System . Threading ;
1111using System . Threading . Tasks ;
12+ using BitFaster . Caching . Lfu ;
1213using BitFaster . Caching . Lru ;
14+ using BitFaster . Caching . Scheduler ;
15+ using ConsoleTables ;
1316using CsvHelper ;
1417using MathNet . Numerics . Distributions ;
1518
@@ -48,10 +51,14 @@ static void Main(string[] args)
4851 resultTable . Columns . Add ( tc . ToString ( ) ) ;
4952 }
5053
51- DataRow concurrentLru = resultTable . NewRow ( ) ;
54+
5255 DataRow classicLru = resultTable . NewRow ( ) ;
53- concurrentLru [ "Class" ] = "concurrentLru" ;
56+ DataRow concurrentLru = resultTable . NewRow ( ) ;
57+ DataRow concurrentLfu = resultTable . NewRow ( ) ;
58+
5459 classicLru [ "Class" ] = "classicLru" ;
60+ concurrentLru [ "Class" ] = "concurrentLru" ;
61+ concurrentLfu [ "Class" ] = "concurrentLfu" ;
5562
5663 foreach ( int tc in threadCount )
5764 {
@@ -61,26 +68,42 @@ static void Main(string[] args)
6168
6269 for ( int i = 0 ; i < warmup + runs ; i ++ )
6370 {
64- results [ i ] = MeasureThroughput ( new ConcurrentLru < int , int > ( tc , capacity , EqualityComparer < int > . Default ) , tc ) ;
71+ results [ i ] = MeasureThroughput ( new ClassicLru < int , int > ( tc , capacity , EqualityComparer < int > . Default ) , tc ) ;
6572 }
6673 double avg = AverageLast ( results , runs ) / 1000000 ;
74+ Console . WriteLine ( $ "ClassicLru ({ tc } ) { avg } million ops/sec") ;
75+ classicLru [ tc . ToString ( ) ] = avg . ToString ( ) ;
76+
77+ for ( int i = 0 ; i < warmup + runs ; i ++ )
78+ {
79+ results [ i ] = MeasureThroughput ( new ConcurrentLru < int , int > ( tc , capacity , EqualityComparer < int > . Default ) , tc ) ;
80+ }
81+ avg = AverageLast ( results , runs ) / 1000000 ;
6782 Console . WriteLine ( $ "ConcurrLru ({ tc } ) { avg } million ops/sec") ;
6883 concurrentLru [ tc . ToString ( ) ] = avg . ToString ( ) ;
6984
7085 for ( int i = 0 ; i < warmup + runs ; i ++ )
7186 {
72- results [ i ] = MeasureThroughput ( new ClassicLru < int , int > ( tc , capacity , EqualityComparer < int > . Default ) , tc ) ;
87+ var scheduler = new BackgroundThreadScheduler ( ) ;
88+ results [ i ] = MeasureThroughput ( new ConcurrentLfu < int , int > ( capacity , scheduler ) , tc ) ;
89+ scheduler . Dispose ( ) ;
7390 }
7491 avg = AverageLast ( results , runs ) / 1000000 ;
75- Console . WriteLine ( $ "ClassicLru ({ tc } ) { avg } million ops/sec") ;
76- classicLru [ tc . ToString ( ) ] = avg . ToString ( ) ;
92+ Console . WriteLine ( $ "ConcurrLfu ({ tc } ) { avg } million ops/sec") ;
93+ concurrentLfu [ tc . ToString ( ) ] = avg . ToString ( ) ;
7794 }
7895
79- resultTable . Rows . Add ( concurrentLru ) ;
8096 resultTable . Rows . Add ( classicLru ) ;
97+ resultTable . Rows . Add ( concurrentLru ) ;
98+ resultTable . Rows . Add ( concurrentLfu ) ;
8199
82100 ExportCsv ( resultTable ) ;
83101
102+ //ConsoleTable
103+ // .From(resultTable)
104+ // .Configure(o => o.NumberAlignment = Alignment.Right)
105+ // .Write(Format.MarkDown);
106+
84107 Console . WriteLine ( "Done." ) ;
85108 }
86109
0 commit comments