0

Castle Windsor を使用して、複数の WCF サービスに依存関係を挿入しています。また、Castle.Facility.WcfIntegration.DefaultServiceHostFactory と城の wcfFacility も使用しています。当社のサービスは IIS でホストされており、Global.aspx イベントにアクセスできます。すべてのコンポーネントは一時的なライフサイクルに登録されています。現在、application_start イベント中にコンテナー内のすべてのコンポーネントを登録してから、application_end 内のコンテナーを破棄します。

ただし、いくつかのブログといくつかの SO 投稿を読んだ後、私のソリューションが漏れているのではないかと心配し始めています。つまり、application_end でコンテナーを解放すると、アプリケーションからメモリがゆっくりとリークするようになると思います。request_start と request_end または mabye session_start と session_end イベントで登録して解放することを考えています。私が抱えている問題は、コンテナを「保持」する場所がわからないため、セッションまたはリクエストが終了した後にコンテナを解放できることです。誰かがこの問題に遭遇しましたか? もしそうなら、どのように解決しましたか?そして、私の解決策は正しいですか?

4

1 に答える 1

1

コンテナーをインスタンス化し、すべてを に登録することApplication_Startは正しいことであり、コンテナーを に破棄することApplication_Endも正しいことです。

通常、Castle Windsor に関連して「メモリ リーク」という言葉が使われる場合、それは一時的なコンポーネントがインスタンスを適切に解放していないことが原因であり、その結果、インスタンスがコンテナーに蓄積される可能性があります。これは、Windsor がユーザーに渡すインスタンスを追跡するという事実によるものです。その依存関係グラフに、使用停止を伴うもの (たとえば、 を実装するものIDisposable) が含まれている場合です。

したがって、Windsor の原則として、解決したものは常にリリースする必要があります。

WCF ファシリティを使用したことがないので、私はこれについての専門家ではありませんが、解決したすべてのものを適切にリリースしなければ非常に驚くでしょう。問題があることを知っているかどうか、または用心しているだけなら?

于 2012-06-20T05:05:37.503 に答える