我在超过10000个元素的集合上使用PLINQ ...我没有获得与顺序查询相比的性能。
我的系统配置如下:操作系统-Windows7 32位,处理器-英特尔Core2Duo。
请帮帮我,我没有得到适当的表现。
查询为:
ParallelQuery<int> j = Enumerable.Range(0, 1000000).AsParallel();
var sss = j.Where(o => o%2 == 0);发布于 2011-01-29 19:37:11
由于您的任务非常轻量级,线程上下文切换将导致较大的开销。可以通过将轻量级任务分组为涉及更多大量工作的批次来改善情况。这可以使用PLinq中的分区支持来实现。请参考以下问题:
通过对任务进行分组,您将更好地利用多线程,因为管理开销变得不那么显着。
在您现有的代码示例中,它类似于用顶针从井中取水,对任务进行分组更像是使用水桶。
发布于 2011-01-29 20:09:10
即使任务在线程之间拆分,调用线程的开销通常也很容易变得比简单地按顺序运行更多。
在本例中,您对它做了一些非常简单的数学运算,因此每个操作都在<10nsec内,并且很好地利用了L1和L2缓存。当你引入线程时,它们的启动成本相对较高,部分原因是它们在等待某件事要做的时候处于休眠状态。
看看Custom Partitioners for PLINQ and TPL吧。
https://stackoverflow.com/questions/4836540
复制相似问题