4

Ninject.Mvc3 NuGet パッケージに足を踏み入れたところですが、作成されたオブジェクトがどれくらい持続するか疑問に思っています。

InRequestScopeこのスコープで作成された各オブジェクトは、Web サーバーが特定の Web 要求を処理している限り存続します。(詳しく言うと、オブジェクトはオブジェクトが存続する限り存続しHttpContext.Currentます)

InSingletonScopeしかし、オブジェクトはどのくらい続くのでしょうか? ドキュメントには、Ninject カーネル自体が行う限り、NinjectWebCommon静的クラスがラップされていると記載されています。これまでのところ、サーバーが webapp を実行している限り、カーネルは生きていると推測できます。サーバーが起動している限り、IIS でアプリが手動で再起動されるか更新されるまで、オブジェクトはスコープ内にあります。

シングルトン スコープとして読み取り専用のデータ ディクショナリを含むデータ アクセサをいくつか用意したいと思っているので、興味があります。これは良い考えなのか、それとも計画中のメモリ リークなのか疑問に思っています。

4

2 に答える 2

5

ASP.NETアプリケーションプールが存続する限り存続します。

アプリケーションプールはいつリサイクルされますか?これを管理する多くの設定があります。アプリケーションプールのリサイクル設定の構成(IIS 7)をお読みください。

ただし、基本的には、それが永遠に続くわけではありません。読み取り専用データをそこに保存する場合は、すべてをロードしてApplication_Start()、リクエストが届いたときに準備ができていることを確認してください。

于 2012-12-18T09:58:29.730 に答える
2

あなたは正しいです。アプリ プールが実行されている限り、シングルトンは存続します。アプリケーション プールのリサイクルを無効にする理由。

ほとんどの Web サイトでは、設定を静的クラス (または Ninject や StructureMap を使用するシングルトンとして) にキャッシュし、データをスレッドセーフな辞書にキャッシュしています。これはもちろんメモリを消費しますが、メモリ リークではありません。設計どおりに動作します。

于 2012-12-18T10:02:29.710 に答える