मैं अपने बड़े एमवीसी ऐप्स में से एक के एक बड़े रिफैक्टरिंग/स्पीड ट्वीकिंग के माध्यम से जा रहा हूं। इसे अब कुछ महीनों के लिए उत्पादन में तैनात किया गया है, और मुझे कनेक्शन पूल में कनेक्शन के लिए टाइमआउट का इंतजार करना शुरू हो गया था। मैंने इस मुद्दे को उन कनेक्शनों पर ट्रैक किया है जो सही ढंग से निपटान नहीं कर रहे हैं।एएसपी एमवीसी: आईकंट्रोलर कब निपटान() कहा जाता है?
कि के प्रकाश में, मैं के बाद से मेरा आधार नियंत्रक लिए यह परिवर्तन किया है:
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 रूपरेखा है कि GarbageCollector अप करने के लिए कितने बजे है?
मैं sooo इस एक का जवाब करने के लिए तत्पर lookig हूँ! महान सवाल! –
अन्य कोड (आपका या एएसपी.नेट एमवीसी ..) को देखे बिना) आपको configManager को ठीक करने की ज़रूरत क्यों है? क्या इससे कुछ मदद मिलती है? आप में से किसी भी "डीयूएच" से पहले पूरी तरह से सोचें .. –
मेरा मतलब है कि एक सामान्य मामले में कि दौड़ की स्थिति को आसानी से हटाया जा सकता है। इस विशेष मामले में मुझे संदेह है कि एक नियंत्रक उदाहरण का उपयोग एक से अधिक धागे द्वारा किया जाएगा और इसलिए दौड़ की स्थिति का कोई खतरा नहीं है। –