2011-10-21 21 views
8

यह my previous question.सेक्शन हैंडल लीक का कारण क्या हो सकता है?

लिए एक अनुवर्ती प्रश्न this answer to my previous question में सुझाव दिया है, मैं ProcessExplorer हैंडल अपने आवेदन एक हैंडल रिसाव को खोजने के लिए उपयोग कर रहा है की एक सूची का विश्लेषण करने के लिए इस्तेमाल किया।

लीकिंग हैंडल अनुभाग प्रकार हैं।

वास्तव में क्या एक वर्ग संभाल है, जहां यह प्रयोग किया जाता है और क्या पैदा कर सकता है अनुभाग लीक करने के लिए संभालती है?

मैं स्मृति का उपयोग नहीं कर रहा हूँ मेरी कोड में मैप फ़ाइलें।

+0

आप मेमोरी मैप की गई फ़ाइलों का उपयोग नहीं कर रहे हैं, कोई और है? आप किस घटक का उपयोग कर रहे हैं? कोई तीसरी पार्टी डीएल है? – Harriv

उत्तर

4

का हवाला देते हुए मार्क Russinovich के अंदर Windows 2000 (जो अब विंडोज Internals कहा जाता है),

खंड वस्तु, जो Win32 सबसिस्टम एक फ़ाइल मानचित्रण वस्तु कहता है, स्मृति का एक ब्लॉक का प्रतिनिधित्व करता है दो या दो से अधिक प्रक्रियाएं साझा कर सकती हैं।

तो, यह एक मेमोरी मैप की गई फ़ाइल है। अगर आप मेमोरी मैप की गई फाइल बनाते हैं और इसे बंद करने में विफल रहते हैं तो वे रिसाव करेंगे। बहुत अधिक विशिष्ट होने के लिए बहुत मुश्किल है।

+1

धन्यवाद। बुरी खबर यह है: मैं स्मृति मैप की गई फ़ाइलों का बिल्कुल उपयोग नहीं कर रहा हूं :( – jpfollenius

2

एक फ़ाइल हैंडल के साथ जुड़ा नहीं एक स्मृति मैप की गई फ़ाइल आईपीसी (प्रक्रिया के बीच संचार) के लिए इस्तेमाल किया जा सकता है। यदि आप सीधे उनका उपयोग नहीं करते हैं, तो शायद आपकी इकाई या घटक में से कोई एक आईपीसी संचार कर रहा है। यह बहुत संभावना है कि आप किसी अन्य प्रक्रिया से कनेक्ट करने के लिए एक घटक का उपयोग करें, और अनुरोध के रूप में इसे जारी न करें।

पहले कार्रवाई नहीं की जा करने के लिए रिसाव (FastMM4 डिबग मोड का प्रयोग करके) किसी भी स्मृति के लिए ट्रैक करने के लिए है, और आप निश्चित रूप से अपने कोड में कुछ संयुक्त राष्ट्र से जारी किया वस्तुओं मिल जाएगा।

के बाद से हैंडल सामान्यतः, वस्तुओं से आवंटित किए जाते हैं अपने प्रयोग से सभी मेमोरी लीक को हल करने के हैंडल लीक का समाधान हो जाएगा।

यदि आपके पास कोई मेमोरी रिसाव नहीं है, तो कुछ CreateFileMapping() कॉल आपके सभी स्रोत कोड (तृतीय-पक्ष स्रोत सहित) में संबंधित CloseHandle() की जांच करने के लिए कॉल करते हैं।

3

ऐसा लगता है कि समस्या एक निम्न स्तर के समारोह है कि मौजूदा प्रक्रिया के धागे की संख्या की गणना में था। इस समारोह में

CreateToolhelp32Snapshot 

एपीआई फ़ंक्शन जो एक हैंडल लौटाता है, जो ठीक से बंद नहीं किया गया था। मुझे यकीन नहीं है कि यह क्यों एक सेक्शन हैंडल रिसाव पैदा करता है।

+0

ठीक है, लेकिन यह अनुभाग हैंडल लीक के लिए एक अप्रत्याशित स्पष्टीकरण है, इसलिए यह प्रश्न के कम से कम हिस्से का जवाब देता है। – jpfollenius

1

.net में अनुभाग हैंडल रिसाव माइक्रोसॉफ्ट Hotfix KB2670838 के कारण है। इस अद्यतन को अनइंस्टॉल करें और सेक्शन हैंडल रिसाव समस्या (मेमोरी से बाहर) तय की जाएगी।

Parameter is not valid. at System.Drawing.Image.get_Width() 
at System.Drawing.Image.get_Size()