Parallel.ForEach在处理极大数据集时抛出异常

时间:2010-09-30 16:46:20

标签: sql-server multithreading parallel-processing linq-to-objects large-data-volumes

我的问题集中在一些过去常常工作的Parallel.ForEach代码上,现在我们的数据库已经增长到5倍,它几乎会定期中断。

Parallel.ForEach<Stock_ListAllResult>( lbStockList.SelectedItems.Cast<Stock_ListAllResult>(), SelectedStock =>
{
    ComputeTipDown( SelectedStock.Symbol );
} );

ComputeTipDown()方法获取符号的所有每日库存tic数据,并遍历每一天,获取昨天的数据并进行一些计算,然后将它们插入到数据库中。

当公式发生变化时,我们很少使用它来重新计算静态数据值。

例外是:

alt text

我们正在打的数据库有16个ram并且是双四核的,当我重新计算时没有人使用该系统。运行应用程序以重新生成代码的机器是一台笔记本电脑,配有12个带有超线程八核的ram。所以没有明显的资源争用。

这是我使用.NET 4和并行处理的尝试,所以我想知道是否有我遗漏的东西。任何想法都会受到欢迎。

1 个答案:

答案 0 :(得分:1)

这看起来像你收到AggregateException,如果任何循环体方法引发异常,这就是Parallel.ForEach会引发的。

如果你调试它,你应该能够查看InnerExceptions以查看抛出的实际异常。看起来ComputeTipDown在一次或多次迭代中引发异常,导致这种情况发生。