2009-11-28 12 views
7

मैं कुछ चल रहे प्रोग्रामों पर स्मृति मुक्त करने के लिए नीचे दिए गए कोड का उपयोग कर रहा हूं क्योंकि मेरे स्वयं के कार्यक्रम को तेजी से चलाने के लिए बड़े मेमोरी संसाधनों की आवश्यकता है।EmptyWorkingSet का उपयोग करने के दुष्प्रभाव क्या हैं?

[DllImport("psapi.dll")] 
public static extern bool EmptyWorkingSet(IntPtr hProcess); 

public FreeMem(string programName){ 

     EmptyWorkingSet(Process.GetCurrentProcess().Handle); 
     foreach(Process process in Process.GetProcesses(programName)) 
     { 
      try 
      { 
       EmptyWorkingSet(process.Handle); 
      } 
      catch (Exception) 
      { 
       ... 
      } 
     } 
} 

यह ठीक काम कर रहा है, मैं 2,000 Kb करने के लिए नीचे 100,000 Kb से एक्सप्लोरर जैसे कुछ कार्यक्रमों की स्मृति के उपयोग को कम करने में सक्षम था। यह बहुत अच्छा है लेकिन क्या ऐसा करने पर कोई दुष्प्रभाव है? कुछ वाणिज्यिक सॉफ़्टवेयर इसका उपयोग यमिक्सॉफ्ट विस्टा/एक्सपी मैनेजर और फ़ायरफ़ॉक्स ऑप्टिमाइज़र जैसे कुछ नाम देने के लिए भी कर रहे हैं, इसलिए मैं सोच रहा हूं कि इसका कोई दुष्प्रभाव नहीं है या नहीं?

उत्तर

2

मुझे संदेह है कि साइड इफेक्ट उन अन्य कार्यक्रमों का प्रदर्शन होगा - सिस्टम को प्रक्रियाओं की आवश्यकता होने पर EmptyWorkingSet() पर वापस कॉल करके पृष्ठों को बदल दिया जाएगा।

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

आपको यह समझने में और अधिक कुशलता मिल सकती है कि आपके स्वयं के कार्यक्रम को इतनी मेमोरी क्यों चाहिए। क्या कहीं कहीं रिसाव है?

+0

शायद तुम सही हो। मैं अन्य कार्यक्रमों को अनुकूलित करने के बजाय अपने स्वयं के कार्यक्रम को अनुकूलित करने का तरीका खोजने की कोशिश करूंगा और यदि खतरनाक हो तो एम्प्टीवर्क्सिंगसेट को हटा दें। – murasaki5

1

व्यक्तिगत रूप से, मैंने इसका समाधान नहीं किया है। 'खतरनाक' की तरह लगता है: वैसे भी पी

, कुछ लेख उपयोगी हो सकते:
Performance Issues with EmptyWorkingSet
Memory management - forcing a process to free it's memory

+0

SetProcessWorkingSetSize के बारे में क्या? मैंने पहले कभी इसका इस्तेमाल नहीं किया। दोनों के बीच क्या अंतर है? – murasaki5

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