我的问题集中在一些过去常常工作的Parallel.ForEach代码上,现在我们的数据库已经增长到5倍,它几乎会定期中断。
Parallel.ForEach<Stock_ListAllResult>( lbStockList.SelectedItems.Cast<Stock_ListAllResult>(), SelectedStock =>
{
ComputeTipDown( SelectedStock.Symbol );
} );
ComputeTipDown()方法获取符号的所有每日库存tic数据,并遍历每一天,获取昨天的数据并进行一些计算,然后将它们插入到数据库中。
当公式发生变化时,我们很少使用它来重新计算静态数据值。
例外是:
我们正在打的数据库有16个ram并且是双四核的,当我重新计算时没有人使用该系统。运行应用程序以重新生成代码的机器是一台笔记本电脑,配有12个带有超线程八核的ram。所以没有明显的资源争用。
这是我使用.NET 4和并行处理的尝试,所以我想知道是否有我遗漏的东西。任何想法都会受到欢迎。
答案 0 :(得分:1)
这看起来像你收到AggregateException,如果任何循环体方法引发异常,这就是Parallel.ForEach会引发的。
如果你调试它,你应该能够查看InnerExceptions以查看抛出的实际异常。看起来ComputeTipDown
在一次或多次迭代中引发异常,导致这种情况发生。