मुझे अपने मिश्रित मोड सी ++/सीएलआर .NET एप्लिकेशन में धीमी मेमोरी लीक के साथ समस्याएं आ रही हैं।मिश्रित मोड में मेमोरी लीक सी ++/सीएलआर एप्लीकेशन
(यह सी ++ देशी स्थिर एक VS2008 सी ++/CLR विंडोज "/ clr" संकलक सेटिंग के साथ फॉर्म्स एप्लिकेशन में लिंक पुस्तकालयों)
विशिष्ट व्यवहार: एप्लिकेशन 30 एमबी (निजी स्मृति) का उपयोग शुरू होता है। फिर स्मृति को धीमा कर देता है, नकली भारी भार के तहत चलने पर हर घंटे एक एमबी कहें। यह ऐप को दिन या सप्ताह के लिए जीने का अनुकरण करता है।
मैंने विजुअल स्टूडियो सीआरटी libs के साथ आने वाली सीआरटी डीबगिंग सामग्री दोनों सहित मेमोरी लीक को ट्रैक करने के लिए कई टूल का उपयोग करने का प्रयास किया है। मैंने एक वाणिज्यिक रिसाव पहचान उपकरण ("मेमोरी वैलिडेटर") भी उपयोग किया है।
दोनों रिपोर्ट शट डाउन पर नगण्य स्मृति रिसाव (कुछ मामूली प्रविष्टियां जो कि कुछ केबी की राशि है जिनके बारे में मुझे चिंता नहीं है)। साथ ही, मैं देख सकता हूं कि ट्रैक की गई मेमोरी इतनी अधिक प्रतीत नहीं होती है (इसलिए मुझे विश्वास नहीं है कि यह केवल स्मृति है जो केवल आयोजित की जा रही है और केवल ऐप से बाहर निकलती है)। मुझे लगभग 5 एमबी सूचीबद्ध मेमोरी मिलती है (कुल> 30 एमबी में से)।
टूल (मेमोरी वैलिडेटर) सभी मेमोरी उपयोग को ट्रैक करने के लिए सेट किया गया है (मॉलोक, नया, वर्चुअल मेमोरी आवंटन और अन्य प्रकार के मेमोरी आवंटन का पूरा समूह)। असल में, प्रत्येक सेटिंग जिसके लिए स्मृति को ट्रैक करना चुना गया है।
.NET छवि रिपोर्ट करता है कि यह लगभग 1.5 एमबी मेमोरी (पेर्फॉन से) का उपयोग कर रहा है।
यहां जानकारी का एक अंतिम विवरण है: हमारे पास ऐप का एक संस्करण है जो देशी कंसोल एप्लिकेशन (पूरी तरह से मूल - सीएलआर नहीं है) के रूप में चलता है। यह यूआई सामान के बिना मिश्रित मोड के रूप में 9 5% समान है। यह स्मृति को रिसाव नहीं लग रहा है, और लगभग 5 एमबी निजी बाइट्स पर चोटियों।
तो मूल रूप से जो मैं यहां पहुंचने की कोशिश कर रहा हूं वह यह है कि मुझे नहीं लगता कि मूल कोड में से कोई भी स्मृति लीक कर रहा है।
पहेली का एक और टुकड़ा: मैं इस जब 2.0 ढांचे (जो मैं कर रहा हूँ) को लक्षित मिश्रित मोड अनुप्रयोगों में मेमोरी लीक करने के लिए जो दर्शाता है पाया: http://support.microsoft.com/kb/961870
दुर्भाग्य से जानकारी दी जा रही infuriatingly विरल तो मैं नहीं करता है, तो यकीन है कि यह प्रासंगिक है। मैंने 2.0 के बजाय 3.5 ढांचे को लक्षित करने का प्रयास किया लेकिन अभी भी वही समस्या थी (शायद मैंने यह सही नहीं किया)।
किसी के पास कोई सुझाव है?
कुछ चीजें हैं जो मेरी मदद कर सकता है:
- वहाँ स्मृति आवंटन है कि मैं नहीं कर रहा हूँ पर नज़र रखने के किसी भी अन्य प्रकार हैं?
- आंकड़े कैसे शामिल नहीं होते हैं? मुझे 5 एमबी सीआरटी मेमोरी उपयोग, 1.5 एमबी की .NET मेमोरी मिलती है तो पूरे ऐप को 30 एमबी निजी बाइट्स का उपयोग कैसे किया जाता है? क्या यह सब .NET ढांचे में बंधे हैं? मैं रिसाव उपकरण में इन्हें क्यों नहीं देखता हूं? क्या .NET ढांचा किसी प्रकार की आवंटित स्मृति के रूप में नहीं दिखाई देगा?
- कोई अन्य लीक पहचान उपकरण जो मिश्रित मोड ऐप्स के साथ अच्छी तरह से काम करता है?
किसी भी मदद
जॉन
.NET 2.0 और .NET 3.5 दोनों एक ही सीएलआर 2.0 का उपयोग करते हैं, क्योंकि आप आसानी से संस्करण संख्याओं से देख सकते हैं ;-) –