Какие советы помогут сократить использование памяти приложениями .NET?Рассмотрим следующую простую программу на C #.
class Program
{
static void Main(string[] args)
{
Console.ReadLine();
}
}
Скомпилированная в режиме release для 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 # более скудным?Я пишу программу, которая предназначена для работы в фоновом режиме большую часть времени.Я уже делаю какие-либо пользовательские интерфейсы в отдельном Application Domain , что означает, что пользовательский интерфейс может быть безопасно выгружен, но занимает 10 МБ, когда он просто находится в фоновом режиме, кажется чрезмерным.
PS Относительно того, почему меня это волнует --- (Power) пользователи склонны беспокоиться об этих вещах.Даже если это почти не влияет на производительность, пользователи, обладающие техническими знаниями (моя целевая аудитория), склонны впадать в шутки по поводу использования памяти фоновыми приложениями.Даже я волнуюсь, когда вижу Adobe Updater, занимающий 11 МБ памяти, и чувствую себя успокоенным от успокаивающего прикосновения Foobar2000, которое может занять менее 6 МБ даже во время игры.Я знаю, что в современных операционных системах этот материал технически не имеет большого значения, но это не значит, что он не влияет на восприятие.