2009-01-20 3 views
19

मेरे पास एक ऐप है कि, चलते समय, अपने स्वयं के मेमोरी उपयोग को पोल करने की आवश्यकता है। यह आदर्श होगा यदि यह प्रत्येक ऑब्जेक्ट के लिए स्मृति उपयोग को सूचीबद्ध कर सकता है। मुझे पता है कि यह डब्लूएमआई द्वारा हासिल किया जा सकता है, लेकिन मैं ऐसा कुछ उम्मीद कर रहा था जो डब्लूएमआई पर भरोसा न करे।रन सी # ऐप की मेमोरी उपयोग रनटाइम पर?

उत्तर

29

दो कार्यों आप उपयोगी लग सकते हैं:

GC.GetTotalMemory(); 
    Process.PagedMemorySize64(); 

मेरा अनुभव रहा है कि GC.GetTotalMemory() बहुत विश्वसनीय नहीं है। यह अक्सर स्मृति उपयोग की रिपोर्ट करता है जो वास्तविक स्मृति उपयोग से बहुत छोटा है। मैंने यह रिपोर्ट देखी है कि जब मैं 16 गीगाबाइट मशीन पर मेमोरी से बाहर चला जाता हूं तो मैं केवल 8 गीगाबाइट्स का उपयोग कर रहा हूं।

मैंने अभी तक प्रक्रिया का परीक्षण नहीं किया है। PagedMemorySize64, हालांकि यह वादा करता है।

+1

मुझे लगता है कि Process.PrivateMemorySize64() सही एक सक्रिय स्मृति के उपयोग के लिए उपयोग करने के लिए है। – maxfridbe

+3

मुझे यकीन नहीं है कि 'Process.PagedMemorySize64' उपयोगी है, लेकिन यह वास्तव में मेरे मामले में काम नहीं कर रहा था। मैं ऑब्जेक्ट्स के समूह के पहले/बाद में तुलना कर रहा हूं, तुरंत पार्सर चलाता है और पार्समेमरी साइज़ 64 पहले और बाद में उसी मूल्य की रिपोर्ट कर रहा था, जबकि 'जीसी.गेटटॉटलमेमरी (सच्चा)' मेमोरी उपयोग में बदलावों को अधिक प्रभावी ढंग से रिपोर्ट करता है । –

+0

http://stackoverflow.com/questions/750574/how-to-get-memory-available-or-used-in-c-sharp –

2

आप परफ़ॉर्मेंस काउंटर, जिसमें आप डेटा के बहुत सारे दे देंगे पर सुनने सकता है (जीसी गतिविधि/भौतिक स्मृति उपयोग/प्रबंधित ढेर आदि ..)

आप गहराई में जाने की जरूरत है तो आप शायद एक डिबगर संलग्न करने के लिए होगा अपने आप को, जो वास्तव में बहुत मुश्किल कारण है, आपको एक नई प्रक्रिया को विकसित करना होगा और इसके साथ संवाद करना होगा, और अपनी याददाश्त के माध्यम से चलना होगा।

2

आप सिस्टम से अपनी प्रक्रिया के बारे में कुछ मोटे ग्रॅन्युलरिटी प्राप्त कर सकते हैं। डायग्नोस्टिक्स, प्रोसेस क्लास। http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx

'प्रति ऑब्जेक्ट' सामग्री में से कोई भी नहीं, लेकिन कम से कम आपकी प्रक्रिया के बारे में कुछ स्मृति जानकारी प्राप्त की जा सकती है।

6
Process proc = Process.GetCurrentProcess(); 
Logger.Info(proc.PeakWorkingSet64/1024 + "kb"); 
0

शायद

Windows::System::Diagnostics::ProcessDiagnosticInfo::GetForCurrentProcess(); 
संबंधित मुद्दे