ASP MVC: Wann ist IController Dispose() aufgerufen?

Werde ich durch ein großes refactoring /speed tweaking von einer meiner größeren MVC apps. Es wurde eingesetzt, um die Produktion für ein paar Monate jetzt, und ich begann zu bekommen timeouts warten auf verbindungen im connection pool. Ich habe verfolgt das Thema nach unten, um die Anschlüsse nicht immer entsorgt.

Im Licht, dass, seitdem habe ich diese änderung vorgenommen, um meine Basis-controller:

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);
    }
}

Nun habe ich zwei Fragen:

  1. Bin ich der Einführung einer race-condition? Da die configManager verwaltet die DataContext entlarvt IQueryable<> Parameter
    die Ansichten, die ich brauche, um sicherzustellen, dass Dispose() werden nicht genannt
    auf dem controller wird, bevor das Oberflächen-rendering.
  2. Hat das MVC-framework nennen Dispose() auf den Controller an, bevor oder nachdem die view gerendert wird? Oder, hat das MVC-framework verlassen, dass
    bis der GarbageCollector?

InformationsquelleAutor der Frage John Gietzen | 2009-09-04

Schreibe einen Kommentar