У меня есть следующий код:
if (!this.writeDataStore.Exists(mat))
{
BlockingCollection<ImageFile> imageFiles = new BlockingCollection<ImageFile>();
Parallel.ForEach(fileGrouping, fi => DecompressAndReadGzFile(fi, imageFiles));
this.PushIntoDb(mat, imageFiles.ToList());
}
DecompressAndReadGzFile
- статический метод в том же классе, в котором содержится этот метод. В соответствии с названием метода я распаковываю и читаю файлы gz, многие из них, т. Е. до 1000, поэтому накладные расходы на распараллеливание того стоят. Однако я не вижу преимуществ. Когда я использую профилировщик производительности ANTS, я вижу, что они выполняются точно в то же время, как если бы распараллеливания не происходит. Я также проверяю ядра процессора с помощью проводника процессов, и похоже, что, возможно, работа выполняется над двумя ядрами, но одно ядро, похоже, делает большую часть работы. Чего я не понимаю, как заставить Parallel.ForEach распаковывать и читать файлы параллельно?
ОБНОВЛЕННЫЙ ВОПРОС: Каков самый быстрый способ чтения информации из списка файлов?
Проблема ( упрощено):
В начальном вопросе я использовал цикл Parallel.ForEach но мне показалось, что процессор не привязан более чем к 1 ядру.