Назвіть кілька порад щодо зменшення використання пам'яті додатків .NET? Розглянемо наступну просту програму C #.
class Program
{
static void Main(string[] args)
{
Console.ReadLine();
}
}
Скомпільований у режимі випуску для x64 та працює поза Visual Studio, менеджер завдань повідомляє про таке:
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);
}
Результати випуску x86 за межами Visual Studio:
Working Set: 2300k
Private Working Set: 964k
Commit Size: 8408k
Що трохи краще, але все ж здається надмірним для такої простої програми. Чи є якісь хитрощі, щоб зробити процес C # трохи піснішим? Я пишу програму, розроблену для роботи у фоновому режимі більшу частину часу. Я вже займаюся будь-якими елементами інтерфейсу користувача в окремому Домені додатка, що означає, що речі інтерфейсу користувача можна безпечно вивантажувати, але зайняття 10 Мб, коли він просто сидить на задньому плані, здається зайвим.
PS Щодо того, чому я б переймався --- (Power) користувачі, як правило, хвилюються з приводу цих речей. Навіть якщо це майже не впливає на продуктивність, користувачі, які сприймають напівтехнології (моя цільова аудиторія), як правило, впадають у шикарну залежність від використання фонової пам’яті програм. Навіть я злякаюсь, коли бачу, як Adobe Updater займає 11 Мб пам'яті і заспокоюється заспокійливим дотиком Foobar2000, який може займати менше 6 МБ навіть під час гри. Я знаю, що в сучасних операційних системах цей матеріал насправді не так важливий технічно, але це не означає, що він не впливає на сприйняття.