From 08eb1d194a73586741921fb8a647013f1c77862d Mon Sep 17 00:00:00 2001 From: rootdarkarchon Date: Wed, 14 Feb 2024 18:43:28 +0100 Subject: [PATCH] do not paralellize fsw changes --- MareSynchronos/FileCache/CacheMonitor.cs | 51 +++++++++++------------- 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/MareSynchronos/FileCache/CacheMonitor.cs b/MareSynchronos/FileCache/CacheMonitor.cs index 34ffdc8..abd1549 100644 --- a/MareSynchronos/FileCache/CacheMonitor.cs +++ b/MareSynchronos/FileCache/CacheMonitor.cs @@ -249,21 +249,19 @@ public sealed class CacheMonitor : DisposableMediatorSubscriberBase _ = RecalculateFileCacheSize(); + if (changes.Any(c => c.Value.ChangeType == WatcherChangeTypes.Deleted)) { - var threadCount = Math.Clamp((int)(Environment.ProcessorCount / 2.0f), 2, 8); - - Parallel.ForEach(changes, new ParallelOptions() + lock (_fileDbManager) { - MaxDegreeOfParallelism = threadCount, - }, - (change) => - { - Logger.LogDebug("FSW Change: {change} = {val}", change.Key, change.Value); - _ = _fileDbManager.GetFileCacheByPath(change.Key); - }); + foreach (var change in changes) + { + Logger.LogDebug("FSW Change: {change} = {val}", change.Key, change.Value); + _ = _fileDbManager.GetFileCacheByPath(change.Key); + } - _fileDbManager.WriteOutFullCsv(); + _fileDbManager.WriteOutFullCsv(); + } } } @@ -295,27 +293,24 @@ public sealed class CacheMonitor : DisposableMediatorSubscriberBase } } - var threadCount = Math.Clamp((int)(Environment.ProcessorCount / 2.0f), 2, 8); - - Parallel.ForEach(changes, new ParallelOptions() + lock (_fileDbManager) { - MaxDegreeOfParallelism = threadCount, - }, - (change) => - { - Logger.LogDebug("FSW Change: {change} = {val}", change.Key, change.Value); - if (change.Value.ChangeType == WatcherChangeTypes.Deleted) + foreach (var change in changes) { - _fileDbManager.GetFileCacheByPath(change.Key); + Logger.LogDebug("FSW Change: {change} = {val}", change.Key, change.Value); + if (change.Value.ChangeType == WatcherChangeTypes.Deleted) + { + _fileDbManager.GetFileCacheByPath(change.Key); + } + else + { + if (change.Value.OldPath != null) _fileDbManager.GetFileCacheByPath(change.Value.OldPath); + _fileDbManager.CreateFileEntry(change.Key); + } } - else - { - if (change.Value.OldPath != null) _fileDbManager.GetFileCacheByPath(change.Value.OldPath); - _fileDbManager.CreateFileEntry(change.Key); - } - }); - _fileDbManager.WriteOutFullCsv(); + _fileDbManager.WriteOutFullCsv(); + } } public void InvokeScan()