0

私は約6 つのバックグラウンド ワーカーとmssql クエリのキューを持つ1 つのスレッドでアプリを作成しています。非常に安定している必要があり、開発は終わりに近づいているため、アプリを約 4 時間実行する小さなテストを実行しました。スレッド ID を除いて、すべて問題ありませんでした。

すべての重要なイベントとエラーをスレッド ID と共にログに記録します。問題は、アプリの開始時には I*D 値が 5 から 15* の間でしたが、4 時間後にはほとんどのスレッドID 値が 70 から 90 の間になったことです。時々、それらは15、40 、またはそれより小さいものでした.

running out of free threads私の質問は、これが " " エラーにつながる可能性があるかどうかです。なぜこれが起こっているのかわかりません。2 つのバックグラウンド ワーカーが無限ループ (値のチェック) を行い、他のワーカーは必要に応じて数回実行されます。スレッド用のある種の GC はありますか? ID の値が非常に大きいのはなぜですか?

テストの実行中、マシンで他に何もしませんでした。

4

1 に答える 1

1

あなたの労働者が完全に終わりに近づいていて、古い労働者がまだ途方に暮れている間に新しい労働者がスピンアップしていないと仮定すると、スレッドIDが増加することを心配する必要はありません.新しいスレッドが作成されていることを示しているだけです.古いものが完了する限り、それで問題ありません。プログラムをコンカレンシー アナライザーに接続し、実際にその動作を確認できます。http://msdn.microsoft.com/en-us/magazine/ee336027.aspxを参照してください。

于 2013-07-26T19:55:08.767 に答える