@@ -18,7 +18,7 @@ Public Class Analyser
18
18
19
19
Public Async Function AnalyseFolder(cancellationToken As CancellationToken) As Task( Of Boolean )
20
20
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)
22
22
Dim compressedFilesCount As Integer = 0
23
23
24
24
' Use local variables to reduce contention
@@ -27,17 +27,19 @@ Public Class Analyser
27
27
28
28
Try
29
29
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 )
41
43
42
44
' Update the shared state after the parallel loop to minimize contention
43
45
CompressedBytes = localCompressedBytes
@@ -48,7 +50,7 @@ Public Class Analyser
48
50
End Try
49
51
50
52
ContainsCompressedFiles = compressedFilesCount > 0
51
- FileCompressionDetailsList = fileDetails.ToList
53
+ FileCompressionDetailsList = fileDetails
52
54
Return ContainsCompressedFiles
53
55
End Function
54
56
0 commit comments