मैंने अभी आपके ब्लॉग पोस्ट को पढ़ा है और मुझे लगता है कि आपको थोड़ी भ्रामक सलाह मिली है, मैट। यदि वास्तविक मेमोरी लीक यहां है, तो यह .NET Framework में एक बग है, और ऐसा कुछ नहीं जो आप अपने कोड में आवश्यक रूप से ठीक कर सकते हैं।
मुझे लगता है कि आप (और आपके ब्लॉग पर पोस्टर) वास्तव में यहां बात कर रहे हैं वास्तव में एक रिसाव नहीं है, बल्कि स्मृति की एक सतत खपत है। यह वही बात नहीं है। स्पष्ट होने के लिए, लीक मेमोरी स्मृति है जो किसी प्रोग्राम द्वारा आरक्षित होती है, फिर त्याग दिया जाता है (यानी, एक सूचक लटकता रहता है), और बाद में इसे मुक्त नहीं किया जा सकता है। चूंकि स्मृति .NET में प्रबंधित है, यह सैद्धांतिक रूप से असंभव है। हालांकि, यह संभव है कि एक कार्यक्रम के लिए गुंजाइश से बाहर जाने के लिए संदर्भों की अनुमति के बिना स्मृति की लगातार बढ़ती मात्रा को आरक्षित करने के लिए (और कचरा संग्रह के लिए योग्य बनें); हालांकि स्मृति को लीक नहीं किया गया है। एक बार आपका प्रोग्राम निकलने के बाद जीसी इसे सिस्टम में वापस कर देगा।
तो। अपने प्रश्न का उत्तर देने के लिए, मुझे नहीं लगता कि आपको वास्तव में यहां कोई समस्या है। आपके पास निश्चित रूप से मेमोरी रिसाव नहीं है, और आपके कोड से, मुझे नहीं लगता कि आपको चिंता करने की ज़रूरत है, जहां तक स्मृति खपत भी जाती है। जब तक आप यह सुनिश्चित न करें कि आप बार-बार उस ईवेंट हैंडलर को कभी भी इसे निर्दिष्ट किए बिना असाइन नहीं कर रहे हैं (यानी, कि आप या तो इसे कभी भी एक बार सेट करते हैं, या आप इसे निर्दिष्ट करते समय प्रत्येक बार इसे हटा देते हैं), जो ऐसा लगता है कि आपका कोड ठीक होना चाहिए।
ऐसा लगता है कि आपके ब्लॉग पर पोस्टर आपको देने की कोशिश कर रहा था, लेकिन उसने उस खतरनाक काम "रिसाव" का उपयोग किया जो एक डरावना शब्द है, लेकिन कौन से प्रोग्रामर वास्तविक अर्थ भूल गए हैं प्रबंधित दुनिया; यह यहां लागू नहीं होता है।
मैं इसे वोट दे रहा हूं क्योंकि उत्तर के वास्तविक प्रश्न से कोई लेना देना नहीं है। आम तौर पर हर किसी को स्मृति रिसाव और उसके कारणों के गड्ढे के बारे में पता है, विशेष रूप से घटना के हैंडलरों के कारण आपने उल्लेख किया है। यहां @Matt क्या जानना चाहता था कि अंदरूनी व्यवहारों का उपयोग करते समय ईवेंट हैंडलर को सुरक्षित रूप से कैसे संभालना है। मैं जल्द ही इसका जवाब दूंगा। –