@@ -59,29 +59,40 @@ Public Class Analyser
59
59
End Try
60
60
61
61
End Sub
62
-
63
-
64
62
Public Async Function GetPoorlyCompressedExtensions() As Task( Of List( Of ExtensionResult))
65
- Dim extClassResults As List( Of ExtensionResult) = Await Task.Run(
66
- Function ()
67
- Dim extRes As New List( Of ExtensionResult)
68
- For Each fl In FileCompressionDetailsList
69
- Dim fInfo As New IO.FileInfo(fl.FileName)
70
- Dim xt = fInfo.Extension
71
- If fl.UncompressedSize = 0 Then Continue For
72
- Dim obj = extRes.FirstOrDefault( Function (x) x.extension = xt, Nothing )
73
- If obj Is Nothing Then
74
- extRes.Add( New ExtensionResult With {.extension = xt, .totalFiles = 1 , .uncompressedBytes = fl.UncompressedSize, .compressedBytes = fl.CompressedSize})
75
- Continue For
76
- End If
77
- obj.uncompressedBytes += fl.UncompressedSize
78
- obj.compressedBytes += fl.CompressedSize
79
- obj.totalFiles += 1
80
- Next
81
- Return extRes
82
- End Function )
83
-
84
- Return extClassResults.Where( Function (f) f.cRatio > 0.95 ).ToList()
63
+ Dim extClassResults As New List( Of ExtensionResult)
64
+ Await Task.Run(
65
+ Sub ()
66
+ Dim extRes As New Concurrent.ConcurrentDictionary( Of String , ExtensionResult)
67
+ Parallel.ForEach(FileCompressionDetailsList,
68
+ Sub (fl)
69
+ Dim xt = New IO.FileInfo(fl.FileName).Extension
70
+ If fl.UncompressedSize = 0 Then Return
71
+
72
+ extRes.AddOrUpdate(xt,
73
+ Function (addKey) ' Add value factory
74
+ Return New ExtensionResult With {
75
+ .extension = xt,
76
+ .totalFiles = 1 ,
77
+ .uncompressedBytes = fl.UncompressedSize,
78
+ .compressedBytes = fl.CompressedSize
79
+ }
80
+ End Function ,
81
+ Function (updateKey, oldValue) ' Update value factory
82
+ Return New ExtensionResult With {
83
+ .extension = xt,
84
+ .totalFiles = oldValue.totalFiles + 1 ,
85
+ .uncompressedBytes = oldValue.uncompressedBytes + fl.UncompressedSize,
86
+ .compressedBytes = oldValue.compressedBytes + fl.CompressedSize
87
+ }
88
+ End Function )
89
+ End Sub )
90
+
91
+ ' Filter and convert to list after aggregation
92
+ extClassResults = extRes.Values.Where( Function (f) f.cRatio > 0.95 ).ToList()
93
+ End Sub )
94
+
95
+ Return extClassResults
85
96
End Function
86
97
87
98
Private Function DetectCompression(fInfo As FileInfo) As CompressionAlgorithm
0 commit comments