2014-09-25 9 views
14

में मेमोरी उपयोग की जांच करें मैं एक प्रोग्राम बना रहा हूं जो किसी प्रकार का कैश लागू करता है। मैं जितना संभव हो उतना स्मृति का उपयोग करने के लिए और है कि मैं दो काम करने की जरूरत है क्या करने की जरूरत: (RAM केवल स्वैप नहीं) कितनी स्मृति अभी भी सिस्टम में उपलब्ध हैहैकेल

  1. चेक
  2. चेक कितनी स्मृति मेरी ऐप पहले से ही उपयोग कर रहा है।

मुझे एक मंच स्वतंत्र समाधान (लिनक्स, विंडोज, आदि) की आवश्यकता है।

जानकारी के इन दो टुकड़ों का उपयोग करके मैं कैश के आकार को कम कर दूंगा या इसे बड़ा कर दूंगा। मैं इस जानकारी को हास्केल में कैसे प्राप्त कर सकता हूं? क्या कोई पैकेज है जो उस जानकारी को प्रदान कर सकता है?

+1

"जांचें कि सिस्टम में अभी भी कितनी मेमोरी उपलब्ध है"। इस सवाल में बहुत समझ नहीं है। आपके पास एक स्वैप फ़ाइल है जो 2TB तक बढ़ सकती है। क्या वह स्मृति "उपलब्ध" है? यदि आप इसे सब पर कब्जा करते हैं, तो आपका सिस्टम रोक देगा। शायद आप भौतिक स्मृति की जांच करना चाहते हैं। लेकिन क्या होगा यदि आपके पास एक ब्राउज़र में 300 टैब खुले हैं जो सभी एक हफ्ते तक छूटे हुए हैं? वे एक टोपी की बूंद पर बाहर निकलने के लिए तैयार हैं, लेकिन वे अभी 99.5% शारीरिक स्मृति पर कब्जा कर रहे हैं, इसलिए आपके पास "उपलब्ध" पर कुछ भी नहीं है। –

+1

@ एन.एम. मुझे लगता है कि यह स्पष्ट है कि कैश को लागू करने के लिए मुझे रैम में मौजूद खाली स्थान की आवश्यकता है, न कि SWAP में। एक कैश बनाना जो सिस्टम स्वैपिंग करेगा, एक अच्छा विचार नहीं है। ; पी – remdezx

+0

उपयोगकर्ता को कैश आकार निर्दिष्ट क्यों न करें? वे ऐसा प्रोग्राम नहीं चाहते हैं जो किसी भी तरह से स्वचालित रूप से सभी रैम का उपयोग करता हो। –

उत्तर

3

मैं तुरंत यह नहीं देख सकता कि यह पोर्टेबल कैसे करें।

हालांकि, जीएचसी में "कमजोर पॉइंटर्स" हैं। (System.Mem.Weak देखें।) यदि आप कमजोर पॉइंटर्स (केवल) के माध्यम से आइटम बनाते हैं और उन्हें लटकते हैं, तो कचरा कलेक्टर स्वचालित रूप से भौतिक स्मृति पर चलने पर आइटम को हटाना शुरू कर देगा।

(दुर्भाग्य से, यह आप हटाना जो आइटम तय करने की क्षमता नहीं देता है पहले — जैसे, जो कि पुनः बनाना सस्ता कर रहे हैं या लोगों की है कि कम से कम इस्तेमाल किया या कुछ और कर दिया गया।)

+0

बहुत दिलचस्प लग रहा है! दुर्भाग्यवश, इसमें कुछ वास्तुकला परिवर्तन की आवश्यकता होगी, लेकिन मैं इसे देख सकता हूं। धन्यवाद! – remdezx

+0

आपको यह भी जानने में रुचि हो सकती है कि 'System.Mem' में एक विशिष्ट समय पर चलाने के लिए जीसी को उत्तेजित करने के लिए फ़ंक्शन शामिल हैं (उदाहरण के लिए, आपने वास्तव में एक बड़ी वस्तु का उपयोग करना बंद कर दिया है)। सीधे आपके प्रश्न से संबंधित नहीं है, लेकिन दिलचस्प हो सकता है। – MathematicalOrchid

+0

मुझे पता है, मैंने उन्हें पाया जब मैं उस विषय में और अधिक खुदाई कर रहा था :) – remdezx