2

重複の可能性:
ASP.NET WebForms と比較して、ASP.NET MVC ページの「ページ ライフサイクル」とは何ですか?

ASP.NET MVC では、私が読んだ多数の「ページ ライフサイクル」または「リクエスト ライフサイクル」の記事の中で、オブジェクトの破棄に触れているものは何も見つかりません。アクション メソッドで、データベースへの接続を作成する (または EF へのコンテキストを作成する) 場合、dispose を明示的に呼び出さないと破棄されますか?

ビューへのモデル バインディングではまだ開いている接続が必要になる可能性があることはわかっていますが (特に、関連付けのある EF オブジェクトを提供している場合)、要求中にインスタンス化されたすべてのものを破棄しますか? もしそうなら、誰かがこれを私に指摘してもらえますか?

4

2 に答える 2

3

リクエストごとに、コントローラー オブジェクトの新しいインスタンスが作成されます。これは、アクションが実行されると、このコントローラーへの参照が失われることを意味します。その上で、ガベージ コレクターは、リソースを集中的に使用するすべてのオブジェクトを破棄して閉じる必要があります。

したがって、ベスト プラクティスは常に、アクション メソッド自体ですべての負荷の高いオブジェクトを閉じて破棄することです。

EF オブジェクトをバインドするときにビューにライブ接続が必要であることを理解しています。ここでもベスト プラクティスは、ビューにバインドする前にそれらを列挙することです。

あなたの質問への答えは - ガベージコレクターは、アクションメソッドで開いたままになっている接続を破棄または閉じる責任があります - そして、これは災害の公式です。

編集 注:コントローラークラスは IDisposable を実装しているため、リクエストが処理された後に破棄する必要があります。しかし、DefaultControllerFactory のソース コードを確認したところ、スコープまたは明示的な dispose 呼び出しを使用しているものはわかりませんでした。

参照

http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/5d4159c85ff6#src/System.Web.Mvc/DefaultControllerFactory.cs
于 2012-12-27T15:22:42.120 に答える
1

コントローラーのスコープまたはアクションのスコープで宣言されているすべてのものは、リクエストが終了した後に破棄されます。

于 2012-12-27T15:21:50.597 に答える