2008-10-21 9 views
6

मेरे पास रनटाइम पर एक स्थिर वस्तु है जो मूल रूप से अन्य वस्तुओं (इंट्स, स्ट्रिंग्स, डिक्शनरी, अन्य ऑब्जेक्ट्स इत्यादि) की एक सूची है। रनटाइम पर मेरी स्थिर "अन्य ऑब्जेक्ट्स की सूची" ऑब्जेक्ट द्वारा उपयोग की गई मेमोरी को निर्धारित करने का कोई तरीका है? यह उपकरण और रिपोर्टिंग उद्देश्यों के लिए आसान होगा।.NET में रनटाइम पर किसी ऑब्जेक्ट की मेमोरी पदचिह्न क्या है?

उत्तर

2

आप शायद कुछ ऐसा पूछ रहे हैं जिसे आप अपने कोड से कॉल कर सकते हैं (जिसे मैं भी जानना चाहता हूं), लेकिन मुझे लगा कि मुझे एंट्स प्रोफाइलर [http://www.red-gate.com/Products/ants_profiler/index.htm] का उल्लेख करना चाहिए यदि अन्य विशिष्ट के रूप में कुछ नहीं ढूंढ रहे हैं। यह आपको निष्पादित करते समय आपके कोड के बारे में सभी प्रकार की जानकारी बताएगा जिसमें कितनी मेमोरी का उपयोग किया जा रहा है।

अपनी वेबसाइट से ...

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

+0

मैं वास्तव में एक प्रोग्रामेटिक कार्यान्वयन की तलाश में हूं। लेकिन मैं मानता हूं कि एएनटीएस प्रोफाइलर निश्चित रूप से सही परिस्थितियों में आसान हो सकता है :) – Bullines

3

sizeof मूल्य प्रकार पर इस्तेमाल किया जा सकता वहाँ भी Marshal.SizeOf जो नेट के लिए कुछ संकेत के साथ इस्तेमाल किया जा सकता है:

http://www.pixelicious.net/2008/07/03/exception-trying-to-get-the-size-of-a-c-class-using-marshalsizeof

लेकिन ... कि वास्तव में कुल नहीं है लागत के बाद से रनटाइम सिंक ब्लॉक जैसी चीजों के लिए कक्षाओं के लिए अतिरिक्त बाइट आवंटित करता है।

http://msdn.microsoft.com/en-us/library/ms404386.aspx

या WinDbg कि अच्छी बातें की सभी प्रकार कर सकते हैं की तरह एक नि: शुल्क उपकरण:

तुम सच बात के इस प्रकार को मापने में रुचि रखते हैं, हालांकि, आप की रूपरेखा एपीआई का उपयोग करना चाहिए।

1

प्रोफाइलर के बिना नहीं। यह केवल एक वर्ग के लिए काफी कठिन है - here देखें।

2

एसओएस डीबगिंग लाइब्रेरी आज़माएं। यह सबसे अच्छा है। लेख here और here

0

उत्तर के लिए धन्यवाद। मुझे लगता है कि हमले की शुरुआती योजना है, क्योंकि मुझे यकीन है कि अधिकांश ऑब्जेक्ट्स क्रमबद्ध होंगे, इस तरह कुछ होगा:

using (MemoryStream memstream = new MemoryStream()) 
{ 
    BinaryFormatter formatter = new BinaryFormatter(); 

    try 
    { 
     formatter.Serialize(memstream, myObjectOfObjects); 
     mem_footprint += memstream.Length; 
    } 
    catch 
    { 
     // not a serializable object 
    } 
} 
संबंधित मुद्दे