Параллельная загрузка изображений в LINQ
Я экспериментирую с parallel и LINQ. Посмотрите на код ниже. Это работает, но только чтобы получить идею:
private void LoadImages(string path)
{
images =
Directory.GetFiles(path)
.Select(f => GetImage(f))
.ToList();
}
private Image GetImage(string path)
{
return Image.FromFile(path);
}
Таким образом, я в основном получаю изображение из каждого файла, найденного в указанном каталоге. Вопрос в том-как провести эту параллель? Прямо сейчас это похоже на повторение их. Я хотел бы распараллелить его "как-нибудь". Так или иначе, потому что я слишком неопытен, чтобы предложить идею, как этого достичь, поэтому я прошу вас, ребята, рассчитывая на некоторую помощь, чтобы сделать это быстрее :)
2 ответа:
Использование PLINQ:
var images=(from file in Directory.EnumerateFiles(path).AsParallel() select GetImage(file)).ToList();
Чтение изображений не связано с процессором, поэтому вы можете указать более высокую степень параллелизма:
var images=(from file in Directory.EnumerateFiles(path) .AsParallel() .WithDegreeOfParallelism(16) select GetImage(file)).ToList();