大きなMVCアプリの1つで、大きなリファクタリング/速度の調整を行っています。数か月前から本番環境にデプロイされており、接続プールでの接続を待機するタイムアウトが発生し始めていました。接続が適切に破棄されないまで問題を追跡しました。
それを踏まえて、私はそれ以来、ベースコントローラーにこの変更を加えました。
public class MyBaseController : Controller
{
private ConfigurationManager configManager; // Manages the data context.
public MyBaseController()
{
configManager = new ConfigurationManager();
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (this.configManager != null)
{
this.configManager.Dispose();
this.configManager = null;
}
}
base.Dispose(disposing);
}
}
今、私は2つの質問があります:
- 競合状態を導入していますか?以来
configManager
管理しDataContext
ている公開されるIQueryable<>
ビューのパラメータを、私はそれを確認する必要がありDispose()
ビューが終了すると、レンダリング前にコントローラーで呼び出されることはありません。 - MVCフレームワーク
Dispose()
は、ビューがレンダリングされる前または後にコントローラーを呼び出しますか?または、MVCフレームワークはそれをGarbageCollectorに任せていますか?