2013-10-24 5 views
5

मैं कुछ "फ्री रैम" टूल पर काम कर रहा हूं, जिसमें सभी अनुप्रयोगों के लिए 'LOW_MEMORY' सिग्नल भेजने के लिए विंडोज़ को मजबूर करना पड़ता है (जो सभी अप्रयुक्त डेटा को मुक्त करने के लिए सभी एप्लिकेशन पूछता है, SQL सर्वर और फ़ाइल कैश साफ़ हो जाते हैं ताकि आप समाप्त हो जाएंगे बहुत सी अतिरिक्त खाली जगह)।विंडोज़ को सभी अनुप्रयोगों को 'LOW_MEMORY' सिग्नल भेजने के लिए कैसे मजबूर करें?

सी ++ में ऐसा करने के लिए सबसे अच्छा तरीका क्या होगा? मेरे लिए सबसे अधिक "प्राकृतिक" समाधान स्मृति की एक बड़ी मात्रा आवंटित करना होगा, लेकिन क्या यह एक "अच्छा" और "स्थिर" तरीका है? शायद WinAPI या कहीं और इसके लिए कोई सी ++ विंडोज मूल कार्य है?

पेज। कि उपकरण की अवधारणा से आया है (और मुझे पता है कि बेहतर तरीका ... कुछ रैम खरीदने के लिए है, लेकिन मैं अब इस तरह के उपकरण लिखने के लिए है):

https://superuser.com/questions/214526/how-does-a-free-up-ram-utility-free-up-ram

+0

आप ऐसे टूल का उपयोग/लेखन क्यों कर रहे हैं? आवश्यकता होने पर आपका ऑपरेटिंग सिस्टम स्वचालित रूप से रैम को मुक्त करता है। – orlp

+8

... और लिंक किए गए प्रश्न को पढ़ने से आपको पहले से ही यह विचार दिया जाना चाहिए कि सामान्य रूप से ऐसा टूल वास्तव में आपको कोई अच्छा नहीं कर रहा है – codeling

+0

मैं इसे लिखता हूं क्योंकि कंपनी मैं इसे लिखने के लिए काम कर रहा हूं। तो इसके बारे में "कोई चर्चा नहीं" है;) और मुझे पता है कि इस तरह के अधिकांश कार्यक्रम (जैसे सीसीलेनेर इत्यादि) इस तरह से करते हैं। इसलिए मैं सिग्नल को सी ++ में विंडोज़ के अनुप्रयोगों में भेजना चाहता हूं, भले ही यह परिणाम में थोड़ा सा व्यर्थ हो। – PolGraphic

उत्तर

2

एक और संभावना के रूप में here on MSDN वर्णित है, संभवतः लंघन, सक्रिय प्रक्रिया सूची के माध्यम से पुनरावृति, और हर एक पूछने ट्रिम करने के लिए यह काम कर रहा सेट है, SetProcessWorkingSetSize (hProcess, (size_t) -1, (size_t) -1) के माध्यम से करने के लिए हो सकता है आवेदन यदि आपका इरादा किसी विशेष एप्लिकेशन के प्रदर्शन में सुधार करने का प्रयास करना है (बेंचमार्किंग बिल्कुल आपका मित्र है)।

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

0

कुछ लिंक कर रहे हैं जो हो सकता है MSDN पर आप के लिए काम का हो:

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

+0

वोट दिया गया इसे अपनाने के लिए "अप" के लिए;) दुख की बात है कि मैं आपके दोनों उत्तरों को चिह्नित नहीं कर सका, लेकिन मुझे चुनना है और जेम्स हूगार्ड ने एक समाधान दिया है, फिर भी आपने गहन शोध शुरू करने के लिए एक महान बिंदु दिया है। – PolGraphic

+0

वोट अप के लिए धन्यवाद :) ईमानदारी से सिर्फ उत्सुक था, आभासी राम के लिए फ्लश करने के लिए जेम्स के जवाब, अच्छा, संक्षिप्त और ओएस दोस्ताना तरीका प्यार था। – GMasucci

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

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