.NET uygulamalarının bellek kullanımını azaltmak için bazı ipuçları nelerdir? Aşağıdaki basit C # programını düşünün.
class Program
{
static void Main(string[] args)
{
Console.ReadLine();
}
}
X64 için yayın modunda derlenen ve Visual Studio dışında çalışan görev yöneticisi şunları bildirir:
Working Set: 9364k
Private Working Set: 2500k
Commit Size: 17480k
Sadece x86 için derlenmişse biraz daha iyi :
Working Set: 5888k
Private Working Set: 1280k
Commit Size: 7012k
Daha sonra, aynı şeyi yapan ancak çalışma zamanı başlatıldıktan sonra işlem boyutunu kırpmaya çalışan aşağıdaki programı denedim:
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 dışında x86 Sürümündeki sonuçlar :
Working Set: 2300k
Private Working Set: 964k
Commit Size: 8408k
Bu biraz daha iyi, ancak yine de böylesine basit bir program için aşırı görünüyor. C # sürecini biraz daha zayıf hale getirmenin püf noktaları var mı? Çoğu zaman arka planda çalışmak üzere tasarlanmış bir program yazıyorum. Zaten ayrı bir Uygulama Alanında herhangi bir kullanıcı arayüzü işi yapıyorum , bu da kullanıcı arayüzü öğelerinin güvenli bir şekilde kaldırılabileceği anlamına geliyor, ancak arka planda oturduğunda 10 MB yer kaplaması aşırı görünüyor.
Not : Neden umursayacağıma gelince --- (Güç) kullanıcıları bu şeyler hakkında endişelenme eğilimindedir. Performans üzerinde neredeyse hiçbir etkisi olmasa bile, yarı teknoloji meraklısı kullanıcılar (hedef kitlenim) arka plan uygulama belleği kullanımı hakkında tedirginlik uyandırıyor. Adobe Updater'ın 11 MB bellek aldığını gördüğümde ve oyun oynarken bile 6 MB'nin altına düşebilen Foobar2000'in sakinleştirici dokunuşuyla rahatlamış hissettiğimde bile çıldırıyorum. Modern işletim sistemlerinde biliyorum, bu şey teknik olarak o kadar önemli değil, ama bu algı üzerinde bir etkisi olmadığı anlamına gelmez.