-1

私は現在System.Timers.Timer 、Oracle Databaseに対して実行される7つのクエリを実行する単一のタイマーを含むC#(これまで実際に使用したことはありません)で何かを書いています。サーバー上で継続的かつ無期限に実行されるように設計されています。

Windows リソース モニターで実行中のプロセスを見ると、スレッド カウントが増加していました。10 秒間隔で、1 時間以内に 230 スレッドに達しました。タイマーが起動するたびに新しいスレッドが作成されると思いますが、何が問題なのか実際にはわかりません。タスクが完了したら、スレッドを明示的に終了する必要はないと思いました。

ただし、最後のクエリが作業を終了した後に a を追加するThread.CurrentThread.Abort()と、スレッド数は 15 のままです。また、メモリ使用量も大幅に改善されます。

スレッドを中止することは正しいことですか? それは非常に間違っているように感じますが、問題は解決しました。

4

2 に答える 2

-1

http://msdn.microsoft.com/en-us/library/0tcs6ww8.aspxのコメントを参照してください。

SynchronizingObject プロパティが null の場合、ThreadPool スレッドで Elapsed イベントが発生します。Elapsed イベントの処理が Interval より長く続く場合、イベントは別の ThreadPool スレッドで再び発生する可能性があります。この場合、イベント ハンドラーは再入可能にする必要があります。

基本的に、これは、クエリが指定された時間内に終了しないか、実行中のスレッドをロックしているように見えます。

于 2013-05-31T12:57:18.497 に答える