लोग क्यों सोचते हैं कि .NET में एक मेमोरी लीक किसी अन्य लीक के समान नहीं है?
स्मृति रिसाव तब होता है जब आप किसी संसाधन से जुड़ते हैं और उसे जाने नहीं देते हैं। आप यह प्रबंधित और अप्रबंधित कोडिंग दोनों में कर सकते हैं।
.NET, और अन्य प्रोग्रामिंग टूल्स के बारे में, कचरा इकट्ठा करने और स्थितियों को कम करने के अन्य तरीकों के बारे में विचार हैं जो आपके आवेदन को लीक कर देंगे। लेकिन मेमोरी लीक को रोकने का सबसे अच्छा तरीका यह है कि आपको अपने अंतर्निहित मेमोरी मॉडल को समझने की जरूरत है, और आप जिस प्लेटफॉर्म का उपयोग कर रहे हैं, वह कैसे काम करता है।
यह मानते हुए कि जीसी और अन्य जादू आपकी गंदगी को साफ कर देंगे स्मृति रिसाव का छोटा रास्ता है, और बाद में इसे खोजना मुश्किल होगा।
अप्रबंधित कोडिंग करते समय, आप सामान्य रूप से सफाई करना सुनिश्चित करते हैं, आप जानते हैं कि आप जिन संसाधनों को पकड़ते हैं, उनकी सफाई आपकी जिम्मेदारी होगी, न कि चौकीदार की।
दूसरी ओर .NET में, बहुत सारे लोग सोचते हैं कि GC सब कुछ साफ कर देगा। ठीक है, यह आपके लिए कुछ करता है, लेकिन आपको यह सुनिश्चित करने की आवश्यकता है कि ऐसा है। .NET बहुत सी चीजों को लपेटता है, इसलिए आप हमेशा यह नहीं जानते हैं कि क्या आप एक प्रबंधित या अप्रबंधित संसाधन के साथ काम कर रहे हैं, और आपको यह सुनिश्चित करने की आवश्यकता है कि आप क्या काम कर रहे हैं। फ़ॉन्ट, GDI संसाधन, सक्रिय निर्देशिका, डेटाबेस आदि को हैंडल करना आमतौर पर ऐसी चीजें हैं जिनकी आपको आवश्यकता होती है।
प्रबंधित शर्तों में, मैं यह कहने के लिए अपनी गर्दन को लाइन पर रखूंगा कि प्रक्रिया के मारे जाने / हटाए जाने के बाद वह चली जाएगी।
मुझे लगता है कि बहुत से लोगों के पास यह है, और मुझे उम्मीद है कि यह समाप्त हो जाएगा। आप अपने गंदगी को साफ करने के लिए उपयोगकर्ता को अपना ऐप समाप्त करने के लिए नहीं कह सकते हैं! एक ब्राउज़र पर नज़र डालें, जो IE, FF आदि हो सकता है, फिर खोलें, कहें, Google रीडर, इसे कुछ दिनों के लिए रहने दें, और देखें कि क्या होता है।
यदि आप फिर ब्राउज़र में एक और टैब खोलते हैं, कुछ साइट पर सर्फ करते हैं, तो उस टैब को बंद करें जिसने दूसरे पेज को होस्ट किया है जो ब्राउज़र को लीक करता है, क्या आपको लगता है कि ब्राउज़र मेमोरी को रिलीज़ करेगा? आईई के साथ ऐसा नहीं है। यदि मैं Google रीडर का उपयोग करता हूं, तो मेरे कंप्यूटर पर IE कम समय में (लगभग 3-4 दिन) 1 गिबी मेमोरी आसानी से खा जाएगा। कुछ हेडसेट्स और भी खराब हैं।