私はIISでホストされているWCFアプリケーションを持っています(C#/.Net 4
で書かれています)。時間の経過と共に、プロセスのハンドル数は、多かれ少なかれ線形に増加します(プロセスがリサイクルされる前に30,000も増えます)。 SysInternals Process Explorerによれば、そのプロセスが持つハンドルの大部分はThread
です。ただし、パフォーマンスモニタによれば、スレッドの数はほぼ一定(約40)のままです。"漏れ"スレッドハンドル
明らかに、私は間違ったことをしており、漏れていますThread Handles
。しかし、私はこの文脈でThread Handle
が何であるか正確には不明です。私はそれがスレッドのハンドルであると仮定していましたが、スレッドの数が一貫して残っているので、ハンドルのカウントがどのように増加しているかわかりません。そして、スレッド自体が消えている間は、スレッドを処理する方法は考えられません。さらに、明示的に新しいスレッドを作成しているわけではありません(私はThreadPool
を使用しています)。
明らかに、私は何かを紛失しています。しかし何?
WCFサービスはSingleInstance、PerCall、またはSessionとしてお持ちですか?そこにIoCコンテナを使用していますか? – Jordi
自分でスレッドを管理しているのですか、スレッドプールを使用していますか?どの種類のスレッドがアプリケーションを使用していますか(IISが行うスレッドについては、IIS自身やスレッドによって制限されます) – Rafa
WCFサービスは、単一インスタンスと複数同時実行です。 IOCコンテナなし。 –