Je vais à travers un gros refactoring / vitesse de peaufinage de l'une de mes plus grandes MVC apps. Il a été déployée en production depuis quelques mois maintenant, et je commençais à trouver que délais d'attente pour les connexions dans le pool de connexion. J'ai suivi l'émission vers le bas pour les connexions n'obtenant pas éliminés correctement.
À la lumière de ce que, depuis, j'ai fait ce changement à mon contrôleur de base:
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);
}
}
Simple de disposer le code. Maintenant, j'ai juste une question:
Suis-je l'introduction d'une condition de concurrence?
Depuis l' configManager
gère l' DataContext
qui expose IQueryable<>
paramètres de la vue, j'ai besoin de assurez-vous que Dispose()
ne sera pas appelé sur le contrôleur avant le point de vue des finitions au rendu.
Donc, la vraie question est:
Le framework MVC appel Dispose() sur le Contrôleur avant ou après le point de vue est rendue? Ou, le framework MVC laisse la place à la GarbageCollector?