2009-09-17 9 views
6

मेरे पिछले प्रश्न से संबंधित:
Preventing Memory issues when handling large amounts of textमैं कैसे तय कर सकते हैं कि कितना स्मृति मेरे कार्यक्रम वर्तमान में कब्जा है

यह तय करने के लिए कितनी स्मृति अंतरिक्ष मेरा कार्यक्रम पर कब्जा है एक रास्ता है ? मैं बड़ी मात्रा में टेक्स्ट फ़ाइल को संसाधित करता हूं और आमतौर पर संसाधित वस्तुओं को स्मृति में संग्रहीत करता हूं। ऐसे समय होते हैं जहां बहुत अधिक जानकारी होगी, और मैं स्मृति से बाहर हो जाऊंगा। मेरे पास मेमोरी आवंटन समस्या से बचने का एक समाधान है, लेकिन जब आवश्यक हो तो मैं केवल तब ही इसका उपयोग करना चाहूंगा जब पेजिंग से बचने के लिए, अंत में मेरे प्रदर्शन को कम कर देगा। क्या यह पता लगाने का कोई तरीका है कि मैं कितनी मेमोरी पर कब्जा कर रहा हूं, ताकि जब भी आवश्यक हो तो मैं अपनी जानकारी को पेज कर सकूं?

नोट: मैं एक समाधान की तलाश में हूं कि मेरा प्रोग्राम आवश्यक होने पर पेजिंग शुरू करने के लिए उपयोग कर सकता है।

उत्तर

5

आप GC.GetTotalMemory कोशिश कर सकते हैं:

बाइट्स वर्तमान में आवंटित किया जाना सोचा की संख्या पुन: प्राप्त करता। एक पैरामीटर बताता है कि यह विधि कचरा इकट्ठा करने और वस्तुओं को अंतिम रूप देने प्रणाली अनुमति देने के लिए लौटने से पहले एक संक्षिप्त अंतराल इंतजार कर सकते हैं कि क्या,।

महत्वपूर्ण बात नोट करने के लिए इस हिस्सा है: "बाइट्स वर्तमान में आवंटित किया जाना सोचा की संख्या पुन: प्राप्त करता"। इसका अर्थ यह है कि यह विधि 100% सटीक नहीं हो सकती है - जब तक आप इसे जानते हैं, तब तक आपको अपने एप्लिकेशन निष्पादन में किसी दिए गए बिंदु पर अपने वर्चुअल मेमोरी उपयोग का अंदाज़ा प्राप्त करने में सक्षम होना चाहिए।

संपादित करें: अब मुझे एक अलग समाधान है कि शायद और अधिक उत्पादक हो जाएगा की पेशकश करते हैं: perfmon और CLR performance counters का उपयोग करें।

+0

> "[...] बाइट्स वर्तमान में कामयाब स्मृति में आवंटित की संख्या का सबसे अच्छा उपलब्ध सन्निकटन" अभ्यस्त इस सभी प्रबंधित असेंबली द्वारा उपयोग की जाने वाली स्मृति की मात्रा प्राप्त करें? –

+0

हां यह केवल वर्तमान ऐपडोमेन में होगा। मैं दृढ़ता से इस तरह की चीज़ के लिए perfmon का उपयोग करने की सलाह देते हैं। –

3

आपको वास्तव में एक कोड प्रोफाइलर का उपयोग करने की आवश्यकता है। ये आपको बताएंगे कि क्या हो रहा है, जहां स्मृति का उपयोग किया जा रहा है, आदि

FYI: यह शायद ही कभी है जहां आप सोचते हैं।

+0

+1: हालांकि यह आपके प्रश्न को पूरा नहीं करता है (क्योंकि आप इसे कोड में करना चाहते हैं), यह अभी भी सत्य है; प्रोफाइलिंग अभी भी आपके डिजाइन का एक कदम होना चाहिए क्योंकि यह स्मृति उपयोग के पहलुओं को उजागर करेगा जो कोड-सुलभ मापों से अस्पष्ट हो सकते हैं। उदाहरण के लिए, 'वर्किंगसेट 64' में साझा मेमोरी शामिल है, जिसे आप पृष्ठ से या नहीं तय करते समय कुल से घटा सकते हैं। –

7
long bytes = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64;
3

लंबे बाइट्स = System.Diagnostics.Process.GetCurrentProcess()। WorkingSet64 के लिए और अधिक See Here

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

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