c# - 在 LINQ 中并行加载图像

标签 c# performance linq asynchronous image-loading

我正在试验并行和 LINQ。看看下面的代码。它有效,但只是为了理解:

private void LoadImages(string path)
{
    images =
        Directory.GetFiles(path)
        .Select(f => GetImage(f))
        .ToList();
}

private Image GetImage(string path)
{
    return Image.FromFile(path);
}

所以我基本上是从指定目录中找到的每个文件获取图像。问题是 - 如何使这种平行?现在就像迭代它们一样。我想“以某种方式”将它并行化。不知何故,因为我太缺乏经验,无法提出如何实现这一目标的想法,所以这就是为什么我要问你们,伙计们,指望一些帮助来使这更快:)

最佳答案

使用 PLINQ:

var images=(from file in Directory.EnumerateFiles(path).AsParallel()
           select GetImage(file)).ToList();

读取图像不受 CPU 限制,因此您可以指定更高的并行度:

var images=(from file in Directory.EnumerateFiles(path)
                                  .AsParallel()
                                  .WithDegreeOfParallelism(16)
           select GetImage(file)).ToList();

关于c# - 在 LINQ 中并行加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28884090/

相关文章:

sql - 在 WHERE 语句中使用 OR 进行慢速 JOIN 查询

c# - 通过将字符串类型的列表设置为字典来创建字典

c# - 创建一个接口(interface)或抽象,强制您实现一个在 C# 中返回此被调用类的方法

c# - 在一个集合中订阅一个集合的不错的 Rx 方式

performance - MuPdf 库在从 pdf 页面渲染图像时比 xpdf/poppler 更快吗?

c# - 添加 .ToArray 或 .ToList 是否总能使数据库查询更快?

xml - XLINQ : Remove certain XElements from a xml file which are saved in a LIst<XElement>

c# - 拖放至 Windows 窗体问题

C# "can' t specify constructor/static method in interface"问题所需的正确解决方案

java - 在 javac 中使用高于 -source 的 -target