【发布时间】:2012-07-13 09:42:49
【问题描述】:
我需要获取大量的双精度数组,并使用处理器密集型函数将其分块处理。
我的原始数组非常大,大约 200MB 的双信号数据。
我需要将它分成 5000 个双精度块,使用返回单个双精度的函数处理具有一些处理器密集型数学的那些。需要这些函数中的每一个结果来创建稍后使用的有序数组。
我认为这对于使用 PLINQ 进行并行处理来说是最佳的,但我不太确定如何去做。
我写的幼稚实现是这样的:
var processedList = new List<double>();
var chunk = new List<double>;
foreach (var rawSample in drop.RawSamples)
{
chunk.Add(rawSample);
if (chunk.Count == 5000)
{
// Do long processing here
processedList.Add(LongProcessingFunction(chunk));
chunk.Clear();
}
}
// Do something later with the list of processed values.....
那么,我应该从哪里开始使用 PLINQ?我需要能够使用处理器的所有内核来执行长时间、密集的功能。
我看到 IEnumerable 有一个 Take(n) 函数.....我可以使用它吗?
我可以在这里使用 AsParallel 吗?
谢谢!
【问题讨论】:
-
也许你可以重复使用
Take(5000),把这个chunk的处理放到一个新的Task和WaitAll任务中。 -
我想摆脱管理自己的线程池。我认为创建几千个任务然后等待它们都不会很有效。我认为应该有一些 plinq 语法可以为我做到这一点?
-
如果您的日程安排不是太复杂,我认为使用
TaskFactory.StartNew提供的机制就可以了,也许可以使用TaskCreationOptions.LongRunning。
标签: .net linq c#-4.0 parallel-processing plinq