-1

私は25のスレッドを実行しています。そして、各スレッドは次のことを行います。

  1. 約1000レコードのtxtファイルを読み取り、
  2. データテーブルに入れる
  3. SQLサーバーへのSQL一括挿入

すべてのスレッドを開始した後、スレッドが処理を完了するのを待つ必要があります。これにはThread.Join. 私の問題は、スレッドが上記の手順を完了する前であっても、完了タスクを終了することです。ここで確認できる唯一の理由は、データベース テーブルのサイズが徐々に増加し、2,000 万レコードを超えていることです。そして、データの挿入に時間がかかります。SQL Server にデータを挿入するのを待っている間にスレッドが中止されるということですか? と を使ってみTask.Factory.StartNewましContinueWhenAllたが、結果は同じです。これを処理するより良い方法はありますか?

4

2 に答える 2

0

一部のスレッド内で例外がスローされたようです。おそらく、データベースへの同時接続の制限が原因です。根本原因を理解するには、適切なエラー処理とログを実装する必要があります。

于 2012-07-24T12:18:58.380 に答える
0

いくつかのこと。
1) すべてのスレッドの実行が完了する前にこのタスクが完了したように見える場合は、同期を正しく使用していません。
2) データベースのプールで使用可能な接続が不足している可能性があります。デフォルトでは、ほとんどのデータベースで 10 の同時接続が許可されていると思います。(私はあなたがそれを適切に設定したと仮定しています)。

これはコメントになりたくないので、CW。

于 2012-07-24T12:23:15.830 に答える