से हटाया नहीं गया है मुझे एएसपी.NET एप्लिकेशन के साथ वास्तव में खराब स्मृति समस्याएं आई हैं। ऐसा लगता है जैसे पृष्ठ लोड होने पर हर बार, पृष्ठ का पुराना पिछला उदाहरण स्मृति से नहीं हटाया जाता है। यदि आप दस बार दस बार दबाते हैं, तो स्मृति उदाहरण के लिए 10-20 एमबी जोड़ता है। तनाव और प्रदर्शन परीक्षण के दौरान, यह स्मृति को अधिकतम करेगा और वेब सर्वर क्रैश हो जाएगा ...एएसपी.NET पृष्ठ स्मृति
मैंने एएनटीएस मेमोरी प्रोफाइलिंग चलाई और यह पुष्टि की कि हर बार जब कोई पृष्ठ लोड होता है, तो पुराना इंस्टेन स्मृति में रहता है। मेरे सभी एएसपी.नेट वेब पेज एक मास्टर पेज का भी उपयोग करते हैं। फिर, अगर मैं पृष्ठ पर 10 बार, तो वेब पेज मौजूद है के 10 उदाहरणों, साथ ही मास्टर पेज के 10 उदाहरणों ...
http://oi51.tinypic.com/21msy2g.jpg
चींटियों प्रोफाइलर परिणाम को देखते हुए लोड, आप देख सकते हैं कि प्रत्येक पृष्ठ रीलोड स्मृति के लिए लगभग 320 केबी जोड़ता है, और यह केवल वेब पेज है, यहां तक कि मास्टर पेज को खाते में भी नहीं ले रहा है। मेरा आवेदन एक जीवन बीमा ऐप है जो अनुप्रयोगों को कैप्चर करता है, इसलिए यह लगभग 30-40 पृष्ठों से गुजरता है। तो आप देख सकते हैं कि यह एक बड़े पैमाने पर समस्या क्यों है।
पृष्ठ को स्मृति में रखने के बारे में मैं यह कैसे पता लगाऊंगा? मुझे नहीं पता कि कहां से शुरू करना है ...: \
मेरे सभी पृष्ठ सेवा पंजीकरण के लिए एकता और निर्भरता इंजेक्शन का उपयोग करते हैं ... सुनिश्चित नहीं है कि मुझे पृष्ठ_ऑनलोड के दौरान इन सेवाओं को अनधिकृत करने की आवश्यकता है या नहीं।
संपादित
ठीक है, मैं इस मुद्दे को ट्रैक करने प्रबंधित किया है। पृष्ठ का निपटारा क्यों नहीं किया गया है (GCollected) एकता सेवा उदाहरणों के कारण है जो पंजीकृत है लेकिन पेज के अनलोड के दौरान अपंजीकृत है। इस तरह मैं अपने पन्ने पर एकता का उपयोग कर रहा:
मैं सार्वजनिक संपत्तियों के माध्यम से सेवाओं इंजेक्षन
#region Services
[Dependency]
public ReviewReportService SummaryService { get; set; }
[Dependency]
public Portfolios.PortfolioService PortfolioService { get; set; }
#endregion
तो पेज init, मैं एकता Buildup करना: अब स्पष्ट रूप से जब
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
ApplicationContainer.BuildUp(this.Context, this);
}
पृष्ठ अपने सामान्य जीवन चक्र से गुजरता है और अनलोड को कॉल करता है, यह निर्भरता इंजेक्शन संदर्भ के कारण अनलोड नहीं किया जा सकता है ... मुझे यकीन नहीं है कि सेवाओं को अनियंत्रित कैसे किया जाए (सारांश सेवा, पोर्टफोलियो सेवा)
मैंने ऑनयूनल में निम्नलिखित को कॉल करने का प्रयास किया लेकिन यह कुछ भी नहीं करता:
एप्लिकेशनकंटनर.गेटकॉन्टेनर (संदर्भ)। टायरडाउन (यह);
मैं कैसे निर्धारित करूं कि मेरे पास पृष्ठ का स्थिर संदर्भ है या नहीं? यह पहचानने के किसी भी तरीके से कौन सा ऑब्जेक्ट इसका संदर्भ दे रहा है? – FaNIX