c# - 如何使用 PLINQ 并行初始化大型数组?

标签 c# parallel-processing plinq

我正在尝试使用 PLINQ 初始化一个简单(但很大)的数组:

void Test(int width, int height)
{
    var foo = new Foo[width * height];
    foo.AsParallel().ForAll(c => new Foo());
}

但这会给我留下一个宽度 x 高度为空(未初始化)元素的数组。

当然这一定是可能的,因为这个操作可以简单地被瘫痪(?)。

使用 PLINQ 执行初始化的正确语法是什么?

最佳答案

我不怀疑有一种方法可以使用 LINQ 并行初始化数组,但是,我建议只使用 Parallel.For 代替:

var foo = new Foo[width * height];
Parallel.For(0, foo.Length, i => foo[i] = new Foo());

编辑:因为您想要一个合适的 PLINQ 解决方案(同时,如您所指出的那样修复错字):

var foo = Enumerable.Range(0, width * height)
                    .AsParallel()
                    .Select(x => new Foo())
                    .ToArray();

关于c# - 如何使用 PLINQ 并行初始化大型数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30943113/

相关文章:

c# - 在 C# 中,你如何完成与 #define 相同的事情

c# - 是否可以按日期分组,但在 xceed 数据网格中按日期 + 时间排序?

c# - 为什么 Azure WebJob 无法连接到 Azure SQL,显示“"Storage account is of unsupported type ' Blob-Only/ZRS”。支持的类型是 'General Purpose' ?

java - 数组写入竞争条件

entity-framework - PLINQ 到 Entity Framework : why shouldn't it be used?

c# - 如何使用 SQLite-Net 扩展建立 A -> B -> C 关系

java - Java 中的隐式和显式并行

math - N 体问题 : Efficient parallelization of the double for loop

c# - ConcurrentQueue 上的 PLINQ 不是多线程

c# - Plinq 给出了与 Linq 不同的结果——我做错了什么?