ThreadPool.SetMinThreads()
私は、999 項目の同時辞書を作成し、メソッドを使用して 50 のスレッドを起動する単純なアプリケーションを作成しました。次に、999 個の辞書エントリをループ処理し、データベース内のレコードを更新して、エントリが処理されたことを示すフラグを立てます。
アプリケーションを実行すると、スレッドが開始されたことを確認できます。その後、SQL クエリを実行して、レコードが更新されていることを確認できます。これまでのところ、これらはすべてかなりうまく機能しています。初期スレッドのいくつかが終了すると、スレッドの次のバッチが開始されます (これはまさに私がやりたいことです)。データベース内のレコードがまだ更新されていることを確認でき、アプリケーションが期待どおりに動作していることがわかります。新しいスレッドが作成されているのをまだ確認できますが、デッドロックが発生します。デッドロックを見ると、開始された最初の 50 スレッドの 1 つからのものです。これが私の質問の出番です。
6Gb RAM を搭載した 3Ghz デュアル コア プロセッサでアプリケーションを実行しています。私の SQL Server インスタンスも同じマシンで実行されていますが、これが問題になるとは思いもしませんでした。アプリは概念実証ですが、開発環境で 50 スレッドを実行できないことは有望に見えません。実稼働環境では、アプリケーションと同様に、SQL インスタンスが別のマシン上にあることを私は知っています。何か案は?