@@ -47,7 +47,7 @@ public Analyser(string folder)
4747 Debug . WriteLine ( ex . Message ) ;
4848 return null ;
4949 }
50-
50+
5151
5252
5353 }
@@ -74,48 +74,28 @@ public Analyser(string folder)
7474 }
7575
7676
77- public async Task < List < ExtensionResult > > GetPoorlyCompressedExtensions ( )
77+ public List < ExtensionResult > GetPoorlyCompressedExtensions ( )
7878 {
79-
80- var extRes = new ConcurrentDictionary < string , ExtensionResult > ( ) ;
81-
82- await Task . Run ( ( ) =>
83- {
84- Parallel . ForEach (
85- FileCompressionDetailsList , fl =>
86- {
87- if ( fl . UncompressedSize == 0 ) return ;
88-
89- string ext = Path . GetExtension ( fl . FileName ) ; //should probably use ToLowerInvariant() here
90-
91- extRes . AddOrUpdate (
92- ext ,
93- key => new ExtensionResult
94- {
95- Extension = ext ,
96- TotalFiles = 1 ,
97- CompressedBytes = fl . CompressedSize ,
98- UncompressedBytes = fl . UncompressedSize
99- } ,
100- ( key , existing ) => new ExtensionResult
101- {
102- Extension = ext ,
103- TotalFiles = existing . TotalFiles + 1 ,
104- CompressedBytes = existing . CompressedBytes + fl . CompressedSize ,
105- UncompressedBytes = existing . UncompressedBytes + fl . UncompressedSize
106- } ) ;
107- } ) ;
108- } ) ;
109-
110- return extRes . Values . Where ( r => r . CRatio > 0.95 ) . ToList ( ) ;
111-
79+ // Only use PLINQ if the list is large enough to benefit from parallel processing
80+ IEnumerable < AnalysedFileDetails > query = FileCompressionDetailsList . Count <= 10000
81+ ? FileCompressionDetailsList
82+ : FileCompressionDetailsList . AsParallel ( ) ;
83+
84+ return query
85+ . Where ( fl => fl . UncompressedSize > 0 )
86+ . GroupBy ( fl => Path . GetExtension ( fl . FileName ) , StringComparer . OrdinalIgnoreCase )
87+ . Select ( g => new ExtensionResult
88+ {
89+ Extension = g . Key ,
90+ TotalFiles = g . Count ( ) ,
91+ CompressedBytes = g . Sum ( fl => fl . CompressedSize ) ,
92+ UncompressedBytes = g . Sum ( fl => fl . UncompressedSize )
93+ } )
94+ . Where ( r => r . CRatio > 0.95 )
95+ . ToList ( ) ;
11296
11397 }
11498
115-
116-
117-
118-
11999}
120100
121101
0 commit comments