.NET एप्लिकेशन की मेमोरी उपयोग को कम करने के लिए कुछ सुझाव क्या हैं? निम्नलिखित सरल सी # कार्यक्रम पर विचार करें।
class Program
{
static void Main(string[] args)
{
Console.ReadLine();
}
}
विज़ुअल स्टूडियो के बाहर x64 के लिए रिलीज़ मोड में संकलित और कार्य प्रबंधक निम्नलिखित की रिपोर्ट करता है:
Working Set: 9364k
Private Working Set: 2500k
Commit Size: 17480k
यह थोड़ा बेहतर है अगर इसे सिर्फ x86 के लिए संकलित किया जाए :
Working Set: 5888k
Private Working Set: 1280k
Commit Size: 7012k
फिर मैंने निम्नलिखित कार्यक्रम की कोशिश की, जो कि समान है लेकिन रनटाइम इनिशियलाइज़ेशन के बाद प्रक्रिया के आकार को ट्रिम करने की कोशिश करता है:
class Program
{
static void Main(string[] args)
{
minimizeMemory();
Console.ReadLine();
}
private static void minimizeMemory()
{
GC.Collect(GC.MaxGeneration);
GC.WaitForPendingFinalizers();
SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle,
(UIntPtr) 0xFFFFFFFF, (UIntPtr)0xFFFFFFFF);
}
[DllImport("kernel32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool SetProcessWorkingSetSize(IntPtr process,
UIntPtr minimumWorkingSetSize, UIntPtr maximumWorkingSetSize);
}
Visual Studio के बाहर x86 रिलीज़ पर परिणाम :
Working Set: 2300k
Private Working Set: 964k
Commit Size: 8408k
जो थोड़ा बेहतर है, लेकिन यह अभी भी इस तरह के एक सरल कार्यक्रम के लिए अत्यधिक लगता है। क्या सी # प्रक्रिया को थोड़ा झुकाव देने के लिए कोई चाल है? मैं एक कार्यक्रम लिख रहा हूं जिसे ज्यादातर समय पृष्ठभूमि में चलाने के लिए डिज़ाइन किया गया है। मैं पहले से ही एक अलग अनुप्रयोग डोमेन में किसी भी उपयोगकर्ता इंटरफ़ेस सामान कर रहा हूँ जिसका अर्थ है कि उपयोगकर्ता इंटरफ़ेस सामान सुरक्षित रूप से अनलोड किया जा सकता है, लेकिन जब यह पृष्ठभूमि में बैठा है तो 10 एमबी लेना अत्यधिक लगता है।
पीएस के रूप में मैं क्यों परवाह करेगा --- (पावर) उपयोगकर्ता इन चीजों के बारे में चिंता करते हैं। भले ही इसका प्रदर्शन पर कोई प्रभाव न हो, लेकिन सेमी-टेक-सेवी उपयोगकर्ता (मेरे लक्षित दर्शक) पृष्ठभूमि एप्लिकेशन मेमोरी उपयोग के बारे में हसी फिट बैठता है। यहां तक कि जब मैं 11 एमबी की मेमोरी लेता हुआ एडोब अपडेटर देखता हूं और फोबार 2000 के शांत स्पर्श से खुद को बेहोश महसूस करता हूं, जो खेलते समय भी 6 एमबी से कम का समय ले सकता है। मुझे पता है कि आधुनिक ऑपरेटिंग सिस्टम में, यह सामान वास्तव में तकनीकी रूप से बहुत मायने नहीं रखता है, लेकिन इसका मतलब यह नहीं है कि इसका धारणा पर कोई प्रभाव नहीं पड़ता है।