如何使用 PLINQ 并行初始化大型数组?
How to initialize large array parallel with 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();
我正在尝试使用 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();