मैं अपने बड़े एमवीसी ऐप में से एक के बड़े रीफैक्टरिंग / स्पीड ट्विकिंग से गुजर रहा हूं। यह अब कुछ महीनों के लिए उत्पादन के लिए तैनात किया गया है, और मैं कनेक्शन पूल में कनेक्शन के इंतजार में टाइमआउट प्राप्त करना शुरू कर रहा था। मैंने कनेक्शन को ठीक से निपटाए नहीं जाने के मुद्दे को नीचे ट्रैक किया है।
उसके प्रकाश में, मैंने तब से अपने आधार नियंत्रक में यह परिवर्तन किया है:
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);
}
}
अब, मेरे दो सवाल हैं:
- क्या मैं एक दौड़ की स्थिति का परिचय दे रहा हूं? चूँकि जो दृश्य के मापदंडों को उजागर
configManager
करता है, उसे प्रबंधितDataContext
करता हैIQueryable<>
, मुझे यह सुनिश्चित करने की आवश्यकता है किDispose()
व्यू रेंडरिंग समाप्त होने से पहले नियंत्रक को नहीं बुलाया जाएगा। - क्या MVC फ्रेमवर्क
Dispose()
नियंत्रक को देखने से पहले या बाद में कॉल किया जाता है? या, क्या MVC फ्रेमवर्क कचरा उठाने वाले तक छोड़ देता है?