Я использую System.Threading.Tasks.Parallel.ForEach(). По какой-то причине установка MaxDegreeOfParallelism на «-1» или даже «50» приводит к тому, что цикл работает быстрее (примерно 15 секунд, и он согласован). Значение по умолчанию параметра MaxDegreeOfParallelism равно -1 и установка его на 50 или любой другой номер должен только замедлять работу. В чем причина?Задание по умолчанию MaxDegreeOfParallelism приводит к ускорению работы параллельного цикла
System.Collections.Concurrent.ConcurrentBag<FileDataInfo> filesData = new System.Collections.Concurrent.ConcurrentBag<FileDataInfo>();
System.Threading.Tasks.Parallel.ForEach(filesInfo,
new System.Threading.Tasks.ParallelOptions() { MaxDegreeOfParallelism = -1 },
info =>
{
if (!string.IsNullOrEmpty(info.FolderPath))
info.FolderPath = System.IO.Path.Combine(dataPathDirName, info.FolderPath);
else
info.FolderPath = dataPathDirName;
var storageHandler = FileStorageFactory.CreateStorageHander();
byte[] data = storageHandler.GetFileData(info.FilePath);
filesData.Add(new FileDataInfo() { Info = info, Data = data });
});
Ваше последнее предложение противоречит вашему первому предложению. –
Можете ли вы перефразировать свой вопрос? В одном предложении вы говорите, что это быстрее, а затем вы говорите, что это медленнее. Что ты спрашиваешь? –
Я не вижу в вашем коде дорогостоящей задачи. распараллеливание задач работает лучше всего для дорогостоящих задач, если вы попытаетесь распараллелить множество мелких задач, это может негативно повлиять на вашу производительность (или вы можете получить лишь небольшое повышение, которое не стоит сложности, которую вводит ваш код). –