From 7da6faff83386f11b97107d2bdb68160bab53360 Mon Sep 17 00:00:00 2001 From: Oliver Booth Date: Wed, 17 Apr 2024 14:35:04 +0100 Subject: [PATCH] fix: use ConcurrentBag for hash cache --- FindDuplicates/ListCommand.cs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/FindDuplicates/ListCommand.cs b/FindDuplicates/ListCommand.cs index b50447c..dbf71a2 100644 --- a/FindDuplicates/ListCommand.cs +++ b/FindDuplicates/ListCommand.cs @@ -8,7 +8,7 @@ namespace FindDuplicates; internal sealed class ListCommand : AsyncCommand { - private readonly ConcurrentDictionary> _fileHashMap = new(); + private readonly ConcurrentDictionary> _fileHashMap = new(); public override async Task ExecuteAsync(CommandContext context, ListSettings settings) { @@ -29,7 +29,7 @@ internal sealed class ListCommand : AsyncCommand AnsiConsole.WriteLine(); int duplicates = 0; - foreach ((string hash, List files) in _fileHashMap) + foreach ((string hash, ConcurrentBag files) in _fileHashMap) { int fileCount = files.Count; @@ -119,11 +119,8 @@ internal sealed class ListCommand : AsyncCommand if (settings.Verbose) AnsiConsole.WriteLine($"{file.FullName} ->\n {hash}"); - if (!_fileHashMap.TryGetValue(hash, out List? cache)) - _fileHashMap[hash] = cache = new List(); - - lock (cache) - cache.Add(file); + ConcurrentBag cache = _fileHashMap.GetOrAdd(hash, _ => []); + cache.Add(file); } catch (Exception ex) {