1

私の質問は、以前は確実に機能していたParallel.ForEachコードに焦点を当てていますが、データベースが5倍に拡大したため、ほぼ定期的に壊れています。

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

ComputeTipDown()メソッドは、シンボルのすべての毎日の株価データを取得し、毎日繰り返し、昨日のデータを取得していくつかの計算を実行し、それらを毎日データベースに挿入します。

数式が変更されたときに静的データ値を再計算するためにこれを使用することはめったにありません。

例外はこれです:

代替テキスト

私たちがヒットしているデータベースには16ギガのRAMがあり、デュアルクアッドコアであり、再計算中に誰もシステムを使用していませんでした。コードを再生成するためにアプリケーションを実行しているマシンは、ハイパースレッディングオクタルコアを備えた12ギガのRAMを搭載したラップトップです。したがって、明らかなリソースの競合はありませんでした。

これは、.NET 4と並列処理を使用するための私の取り組みです。そのため、何か足りないものがあるのではないかと思います。どんな考えでも歓迎します。

4

1 に答える 1

1

これは、 AggregateExceptionを受け取ったようです。これは、ループ本体メソッドのいずれかが例外を発生させた場合にParallel.ForEachが発生させるものです。

これをデバッグすると、InnerExceptionsを調べて、スローされた実際の例外を確認できるはずです。ComputeTipDown1つ以上の反復で例外が発生し、これが発生したようです。

于 2010-09-30T16:50:25.150 に答える