2015-06-05 3 views
12

में मेमोरी स्नैपशॉट को कैसे पढ़ा जाए, मैं अपने एप्लिकेशन के मेमोरी स्नैपशॉट लेने के लिए विजुअल स्टूडियो का उपयोग करता हूं।विजुअल स्टूडियो

मेरे पास जो डेटा मिला है उसे समझने के बारे में मेरे कुछ प्रश्न हैं। मै मैनेज स्नैपशॉट कैप्चर करने के बाद, मैं अपनी क्लास में से एक को फ़िल्टर करता हूं, MyClassPanel कहता हूं। मैं केवल अपनी xmal फ़ाइलों में MyClassPanel का उपयोग करता हूं।

  1. क्यों MyClassPanel सब कर रहे हैं के लिए 'रूट करने के लिए पथ' 'MyClassPanel [refcount संभाल, गणना: 1]'? (यानी एक ही नाम लेकिन एक स्ट्रिंग के साथ [अंत में रेफकाउंट हैंडल] और एक अलग गणना मान) इसका क्या अर्थ है? दूसरी कक्षा में, मैं फ़िल्टर करता हूं, मुझे 'रूट टू रूट' अलग-अलग वर्ग नाम दिखाई देते हैं।

  2. मेरे पास 24 MyClassPanel (शीर्ष तालिका में गिनती से) है। और नीचे तालिका में 'संदर्भ गणना' कॉलम में, जब मैं उन्हें जोड़ता हूं, तो वे 24 होते हैं।

क्या यह हमेशा मामला है? मुझे लगता है कि 'गणना' और 'संदर्भ गणना' का अर्थ अलग-अलग चीजें हैं। इस मामले में, वे जोड़ते हैं। इसका कोई मतलब भी है क्या?

enter image description here

+0

पर एक नज़र डालें मैं Redgate स्मृति प्रोफाइलर अधिक स्मृति मुद्दों पर नज़र रखने के लिए उपयोगी है, क्योंकि यह आप उदाहरण प्रतिधारण रेखांकन दिखाएगा पाया है। – CharithJ

उत्तर

3
  1. पथ दृश्य रूट करने के लिए इस प्रकार के यह किया जा रहा कचरा एकत्र से रखने के लिए संदर्भ को दर्शाता है। चूंकि आपकी कक्षा एक एक्सएमएल पृष्ठ है, इसलिए क्लास को जीवित रखने वाला संदर्भ Xaml पृष्ठ के लिए एक सीएलआर हैंडलर है। ये रेफकाउंट हैंडल के रूप में दिखाई देते हैं।

  2. गणना और संदर्भ संख्या वास्तव में वही नहीं हैं। गणना उदाहरणों की संख्या है, संदर्भ संदर्भों की संख्या गिनती है। चूंकि आपके मामले में प्रत्येक उदाहरण में केवल एक संदर्भ होता है, इसलिए यह समझ में आता है कि वे जोड़ते हैं।

अधिक जानकारी के लिए: http://blogs.msdn.com/b/visualstudioalm/archive/2013/06/20/using-visual-studio-2013-to-diagnose-net-memory-issues-in-production.aspx http://blogs.msdn.com/b/visualstudioalm/archive/2013/10/16/net-memory-analysis-enhancements-in-visual-studio-2013.aspx

+0

आपके उत्तर के लिए धन्यवाद। # 1 के लिए, क्या प्रत्येक पैनल को अपने स्वयं के सीएलआर हैंडलर द्वारा जिंदा रखा जाता है? या 1 सीएलआर हैंडलर सभी पैनल जिंदा रहता है। और रेफ गणना संभाल में 'गणना' का अर्थ क्या है? – n179911

+0

मैं अपनी मेमोरी प्रोफाइल के लिए एक स्क्रीनशॉट पोस्ट करता हूं। मेरा एक सवाल है। # 2 के लिए, आपने क्यों कहा 'क्योंकि आपके मामले में प्रत्येक उदाहरण में केवल एक संदर्भ है, यह समझ में आता है कि वे जोड़ते हैं।'क्या मेरा [रेफरी गिनती हैंडल, गणना: 1] में 'माइक्लास पैनल' के 8 संदर्भ हैं और [रेफरी हैंडल हैंडल, गणना: 16] में 'माइक्लास पैनल' के 6 संदर्भ हैं? – n179911

+0

रेफ गणना संभाल में 'गणना' का अर्थ, कॉम ऑब्जेक्ट (https://en.wikipedia.org/wiki/Reference_counting) का संदर्भ गिनती है। इस पृष्ठ के आधार पर लोड किया गया है और संदर्भित किया गया है, यह जीवित रखा गया है –

0

मैं दृश्य स्टूडियो स्नैपशॉट विश्लेषक के एक बड़े प्रशंसक नहीं हूँ। स्नैपशॉट लेने से पहले अंतिमकरण ठीक से निष्पादित नहीं किया गया है, तो कुछ जटिलताएं उपलब्ध हैं। मुझे यकीन नहीं है कि विजुअल स्टूडियो कैसे संभालता है। हालांकि, आपके द्वारा प्रदान किया गया स्नैपशॉट मेरे लिए भी ज्यादा समझ नहीं लेता है।

मैं आपको एएनटीएस मेमोरी प्रोफाइलर डाउनलोड करने और इसकी जांच करने का सुझाव दूंगा। यह एक उचित परीक्षण अवधि के साथ आता है। इसका उपयोग करके, आप 'प्रतिधारण ग्राफ' का उपयोग करके प्रत्येक इंस्टेंस के सभी संदर्भ देख पाएंगे। यह आपको विशेष रूप से दिखाएगा कि कौन से उदाहरण आपकी ऑब्जेक्ट्स के संदर्भ में रहते हैं और यह आपको दिखाएगा कि कौन सी ऑब्जेक्ट्स ने कार्यान्वित किया है लेकिन निपटान नहीं किया है। मुझे लगता है, यह इस मुद्दे के मूल कारण को खोजने के लिए और अधिक समर्थन प्रदान करेगा।

नीचे दिए गए पृष्ठों walkthrough

http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/walkthrough http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/

संबंधित मुद्दे