2009-07-22 9 views
7

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

अनुवांशिक: कार्य प्रबंधक वास्तव में रिपोर्टिंग क्या स्मृति है? ऐसा लगता है कि ऐप को आवंटित सभी स्मृति नहीं है।

उत्तर

2

जैसा कि मैं इसे समझता हूं, कार्य प्रबंधक कार्य सेट दिखाता है;

वर्किंग सेट: स्मृति पृष्ठों हाल ही में एक प्रक्रिया के धागे से छुआ का सेट। यदि कंप्यूटर में मुफ्त मेमोरी थ्रेसहोल्ड से ऊपर है, तो प्रक्रिया के कार्य सेट में छोड़े गए हैं, भले ही वे उपयोग न हों। जब मुफ्त मेमोरी थ्रेसहोल्ड से नीचे आती है, तो पेज कार्य सेट से छंटनी की जाती हैं।

के माध्यम से http://msdn.microsoft.com/en-us/library/cc432779(PROT.10).aspx

आप कार्य प्रबंधक वर्चुअल मेमोरी को दिखाने के लिए और साथ ही मिल सकती है।

मैं निजी बाइट काउंटर का उपयोग करते हुए स्मृति उपयोग को ट्रैक करने के लिए आमतौर पर पेर्फोन (स्टार्ट -> रन ... -> परफमन) का उपयोग करता हूं। यह आपके सामान्य आवंटकों द्वारा आवंटित स्मृति को प्रतिबिंबित करता है (नया/हेपअलोक/मॉलोक, आदि)।

+0

था @Kim के दो को हटाने नहीं में किया था o जानते हैं कि किसी विशेष एप्लिकेशन को कितनी मेमोरी आवंटित की जाती है, फिर, हाल ही में – mmr

+0

के दिए गए मान के लिए, हाल ही में 'हाल ही में' कितना स्पर्श किया गया है, यह विचार है, हां। –

+0

@ किम: ऐसा लगता है जैसे पेर्फोन मुझे चाहिए, धन्यवाद! – mmr

0

यह इस बात पर निर्भर करता है कि आप किस स्मृति के बारे में बात कर रहे हैं। दुर्भाग्य से स्मृति को मापने के कई अलग-अलग तरीके हैं। उदाहरण के लिए ...

  • शारीरिक मेमोरी आवंटित
  • वर्चुअल मेमोरी आवंटित
  • वर्चुअल मेमोरी आरक्षित (लेकिन प्रतिबद्ध नहीं)
  • निजी बाइट्स
  • साझा बाइट्स

कौन सा मीट्रिक हैं आप में रुचि रखते हैं?

मुझे लगता है कि ज्यादातर लोग "वर्चुअल मेमोरी आवंटित" श्रेणी में रूचि रखते हैं।

+0

:-(एक हाइपरलिंक के लिए पहली पोस्ट stackoverflow कि क्योंकि आप आम तौर पर जब स्मृति डिस्क को लगा दिया जाता है नियंत्रित नहीं कर सकते है? क्योंकि ऐसा लगता है शारीरिक आबंटित स्मृति एक है कि समस्याओं का कारण बनता है। मैं इस अंतर-संबंधों पर स्पष्ट अपने आप को ... – RedFilter

+0

@OrbMan, मैं नहीं पहले भाग के बारे में यकीन नहीं कर रहा हूँ। मैं कुछ मौजूदा एपीआई बाहर गिनती नहीं होगा जो कहते हैं, "स्मृति के इस पेज बाहर स्वैप कृपया नहीं" लेकिन मैं एक के हाथ बंद – JaredPar

+0

@JaredPar पता नहीं है: मैं कैसे 64 बिट पता स्थान की ज्यादा आबंटित किया गया है में दिलचस्पी रखता हूँ, जरूरी नहीं कि जहां कि स्मृति मिला ।? इसलिए, यह एक अच्छा तरीका टी नहीं है: आवंटित रूप में, कितने और कैसे बड़े मेरी सरणियों हैं मैं कुछ गलती से एक या उन है कि मैंने सोचा था कि मैं पहले से ही – mmr

2

मेमोरी मापने के लिए एक मुश्किल बात है। एक आवेदन virtual memory के बहुत से आरक्षित कर सकता है लेकिन वास्तव में इसका अधिक उपयोग नहीं करता है। कुछ स्मृति साझा की जा सकती है; यानी, एक साझा डीएलएल कई अनुप्रयोगों के पता स्थान पर लोड किया जा सकता है लेकिन यह केवल एक बार भौतिक स्मृति में लोड हो जाता है।

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

वर्चुअल मेमोरी उपयोग आरक्षित किए गए आभासी पृष्ठों की मात्रा है (ध्यान दें कि इनमें से सभी वास्तव में प्रतिबद्ध नहीं होंगे, यानी इसके लिए आवंटित भौतिक बैकिंग स्टोर था। आप इसे डिस्प्ले में जोड़ सकते हैं दृश्य क्लिक करके कार्य प्रबंधक -> कॉलम चुनें

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

+0

मैं अंततः एक प्रोफाइलर का उपयोग कर सकता हूं, लेकिन मैं देखना चाहता हूं कि ऐप में प्रोफाइलर की मंदी के बिना कितनी मेमोरी का उपयोग किया जा रहा है। आखिरकार, यह जरूरी होगा, लेकिन सिर्फ यहां और अब के लिए वास्तव में कितनी मेमोरी खाई जा रही है, ऐसा लगता है कि पेर्फोन सही उपकरण है। – mmr

0

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

यदि यह एक लंबा चल रहा एप्लिकेशन है, और स्मृति उपयोग समय के साथ बढ़ता है, तो यह बढ़ रहा है कि ढेर होने जा रहा है। ढेर के कुछ हिस्सों को डिस्क पर किसी भी समय डिस्क पर रखा जा सकता है या नहीं, लेकिन आपको वास्तव में आपको ढेर उपयोग को अनुकूलित करने की आवश्यकता है। इस मामले में आपको अपने आवेदन को प्रोफाइल करने की आवश्यकता है। यदि यह एक .NET अनुप्रयोग है तो मैं Redgate के एएनटीएस प्रोफाइलर की सिफारिश कर सकता हूं। यह इस्तेमाल में बहुत आसान है। यदि यह मूल अनुप्रयोग है, तो इंटेल vtune प्रोफाइलर बहुत शक्तिशाली है। आपको किसी भी उपकरण के लिए प्रोफाइलिंग के लिए स्रोत कोड की आवश्यकता नहीं है।

दोनों अनुप्रयोगों में नि: शुल्क परीक्षण है। सौभाग्य।

पीएस खेद है कि मैं उपकरणों के लिए और अधिक हाइपरलिंक शामिल नहीं किया, लेकिन यह मेरी पहली पोस्ट है, और सीमा

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

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