Apa sajakah tip untuk mengurangi penggunaan memori aplikasi .NET? Pertimbangkan program C # sederhana berikut.
class Program
{
static void Main(string[] args)
{
Console.ReadLine();
}
}
Dikompilasi dalam mode rilis untuk x64 dan berjalan di luar Visual Studio, pengelola tugas melaporkan hal berikut:
Working Set: 9364k
Private Working Set: 2500k
Commit Size: 17480k
Sedikit lebih baik jika dikompilasi hanya untuk x86 :
Working Set: 5888k
Private Working Set: 1280k
Commit Size: 7012k
Saya kemudian mencoba program berikut, yang melakukan hal yang sama tetapi mencoba untuk memangkas ukuran proses setelah inisialisasi runtime:
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);
}
Hasil pada x86 Rilis di luar Visual Studio:
Working Set: 2300k
Private Working Set: 964k
Commit Size: 8408k
Mana yang sedikit lebih baik, tetapi masih tampak berlebihan untuk program sederhana seperti itu. Apakah ada trik untuk membuat proses C # sedikit lebih ramping? Saya sedang menulis program yang dirancang untuk berjalan di latar belakang hampir sepanjang waktu. Saya sudah melakukan hal-hal antarmuka pengguna di Domain Aplikasi terpisah yang berarti hal-hal antarmuka pengguna dapat dibongkar dengan aman, tetapi menghabiskan 10 MB ketika hanya duduk di latar belakang tampaknya berlebihan.
NB Tentang mengapa saya akan peduli --- Pengguna (Daya) cenderung khawatir tentang hal-hal ini. Bahkan jika itu hampir tidak berpengaruh pada kinerja, pengguna semi-tech-savvy (audiens target saya) cenderung masuk ke hissy fit tentang penggunaan memori aplikasi latar belakang. Bahkan saya merasa aneh ketika melihat Adobe Updater menggunakan memori 11 MB dan merasa terhibur dengan sentuhan menenangkan dari Foobar2000, yang dapat berukuran di bawah 6 MB bahkan saat bermain. Saya tahu dalam sistem operasi modern, hal-hal ini sebenarnya tidak terlalu penting secara teknis, tetapi itu tidak berarti tidak memengaruhi persepsi.