@@ -18,7 +18,7 @@ Public Class Analyser
1818
1919 Public Async Function AnalyseFolder(cancellationToken As CancellationToken) As Task( Of Boolean )
2020 Dim allFiles = Await Task.Run( Function () Directory.EnumerateFiles(FolderName, "*" , New EnumerationOptions() With {.RecurseSubdirectories = True , .IgnoreInaccessible = True }).AsShortPathNames, cancellationToken).ConfigureAwait( False )
21- Dim fileDetails As New Concurrent.ConcurrentBag (Of AnalysedFileDetails)
21+ Dim fileDetails As New List (Of AnalysedFileDetails)
2222 Dim compressedFilesCount As Integer = 0
2323
2424 ' Use local variables to reduce contention
@@ -27,17 +27,19 @@ Public Class Analyser
2727
2828 Try
2929 Parallel.ForEach(allFiles, New ParallelOptions With {.CancellationToken = cancellationToken},
30- Sub (file)
31- Dim details = AnalyseFile(file)
32- If details IsNot Nothing Then
33- fileDetails.Add(details)
34- If details.CompressionMode <> CompressionAlgorithm.NO_COMPRESSION Then
35- Interlocked.Increment(compressedFilesCount)
36- End If
37- Interlocked.Add(localCompressedBytes, details.CompressedSize)
38- Interlocked.Add(localUncompressedBytes, details.UncompressedSize)
39- End If
40- End Sub )
30+ Sub (file)
31+ Dim details = AnalyseFile(file)
32+ If details IsNot Nothing Then
33+ SyncLock fileDetails
34+ fileDetails.Add(details)
35+ End SyncLock
36+ If details.CompressionMode <> CompressionAlgorithm.NO_COMPRESSION Then
37+ Interlocked.Increment(compressedFilesCount)
38+ End If
39+ Interlocked.Add(localCompressedBytes, details.CompressedSize)
40+ Interlocked.Add(localUncompressedBytes, details.UncompressedSize)
41+ End If
42+ End Sub )
4143
4244 ' Update the shared state after the parallel loop to minimize contention
4345 CompressedBytes = localCompressedBytes
@@ -48,7 +50,7 @@ Public Class Analyser
4850 End Try
4951
5052 ContainsCompressedFiles = compressedFilesCount > 0
51- FileCompressionDetailsList = fileDetails.ToList
53+ FileCompressionDetailsList = fileDetails
5254 Return ContainsCompressedFiles
5355 End Function
5456
0 commit comments