一度に何百万ものレコードを操作する必要があるデータベース同期アプリケーションの改善に取り組んでいます。SqlBulkCopy
操作を採用MERGE
し、データベースで使用して一時テーブルを現在のテーブルとマージします。しかしその前に、データベースに追加するいくつかのテーブルを作成します。通常のループを使用すると問題なく動作しますが、Parallel.ForEach
ループを作成すると、約 100 レコードを処理した後でハングします。エラーも何もありません...何らかのしきい値に達していると思いますが、それを処理する方法がわかりません。2 つの並列スレッドを選択すると正常に動作しますが、2 つ以上のスレッドでエラーが発生しません。
DataTable PRODUCT = new DataTable();
ParallelOptions parOptions = new ParallelOptions();
parOptions.MaxDegreeOfParallelism = 5; //use max (5) threads that are allowed.
Parallel.ForEach(dtPs.AsEnumerable(), parOptions, dtPs_row =>
{
try
{
//some declarations
DataRow newProductRow = PRODUCT.NewRow();
newProductRow.SetField("ID", mId);
newProductRow.SetField("NAME", name);
PRODUCT.Rows.Add(newProductRow);
}
}