1

我的問題集中在一些以前沒有失敗的Parallel.ForEach代碼上,現在我們的數據庫已經增長到5倍大,幾乎定期打破。在處理非常大的數據集時,Parallel.ForEach拋出異常

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

的ComputeTipDown()方法獲取所有的日常股票TIC數據的符號,並遍歷每一天,獲取昨天的數據,並做了一些計算,然後將它們插入到數據庫中的每一天。

當公式更改時,我們很少使用它來重新計算靜態數據值。

例外情況是這樣的:

alt text

我們正在進入數據庫具有RAM的16場演唱會,是雙路四核,沒有人再使用該系統,而我是重新計算。運行應用程序以重新生成代碼的機器是一臺帶有12個超線程八進制內核的ram筆記本電腦。所以沒有明顯的資源爭奪。

這是我對使用.NET 4和並行處理的嘗試,所以我想知道是否有我丟失的東西。任何想法都會受到歡迎。

+0

任何解決方案與完整的源代碼? – Kiquenet 2012-08-22 19:54:25

回答

1

看起來您收到了AggregateException,這是Parallel.ForEach會在任何循環體方法引發異常時引發的。

如果你調試了這個,你應該可以看看InnerExceptions來查看拋出的實際異常。看起來ComputeTipDown在一次或多次迭代中引發異常,導致發生這種情況。

+0

Reed,非常感謝你的建議,我會在ComputeTipDown的捕獲中放置一個斷點,並會看到會發生什麼。 – MikeMalter 2010-09-30 17:23:31

+0

@MikeMalter:您也可以將Parallel.ForEach包裝在try/catch中,並捕獲AggregateException。這將給你在這一點上的細節...... – 2010-09-30 17:26:24

+0

我通過單擊您在答案中提供的AggregateException鏈接來閱讀它。我剛剛得到另一個例外,這次是「真正的」。達到最大池大小。有趣。本週末我將服務器升級到2008 R2,SQL Server升級到2008 R2,並且在此之後,這種情況開始頻繁發生。 – MikeMalter 2010-09-30 17:35:05