2011-06-12 9 views
5

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

मैं एक छोटे से exe लिखा था और मैंने पहले और निर्माण के बाद GC.GetTotalMemory(true) फोन और अंतर के आसपास 335k है लेकिन अगर यह CLR profiler में विश्लेषण यह मेरे 22 एमबी मेमोरी के वस्तु जो मतलब नहीं है के लिए प्रयोग किया जाता है पता चलता है।

मैं सीएलआर प्रोफाइलर में गलत तरीके से व्याख्या कर रहा हूं?
व्यक्तिगत ऑब्जेक्ट आकार देखने के लिए मुझे प्रोफाइलर में कहां जांचना चाहिए?

+0

सीएलआर प्रोफ़ाइल आपके द्वारा भुगतान किए जाने वाले मूल्य के लायक है। अपना समय बर्बाद न करें, जब तक कि आपका समय भी मुक्त न हो। –

+0

क्या आपने केवल एक उदाहरण बनाया था? क्या होगा यदि आप कई उदाहरण बनाते हैं? मुझे लगता है (लेकिन यह एक जंगली अनुमान है) कि 22 एमबी तब तक स्थिर रहेगा जब तक आप इसे पूरा करने के लिए पर्याप्त उदाहरण नहीं बनाते (इसलिए 65 वस्तुओं के बाद या तो यह 44 एमबी तक पहुंच सकता है)? –

उत्तर

1

एमएसडीएन के अनुसार: कचरा कलेक्टर गारंटी नहीं देता है कि सभी पहुंच योग्य स्मृति एकत्र की जाती है।

look here

CLR प्रोफाइलर सभी स्मृति आवंटित पता चलता है;

क्या होगा यदि आप जीसी.गेटटॉटलमेमरी (झूठी) का उपयोग करते हैं तो परिणाम क्या होता है?

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