У меня есть простое приложение С# 2008, которое отображает png-изображение и обрабатывает некоторые простые MouseEvents.
Хотя он ничего сложного, он использует не менее 9,5-10 МБ памяти (как показано в диспетчере задач)
Я уже отключил ведение журнала ошибок, а также удалил символы отладки и трассировки. "Оптимизировать код" активируется.
Есть ли способ уменьшить это? Может быть, с некоторыми опциями в качестве встроенного компиляции фреймворка (это даже существует для .NET?)
Любая идея? Или это просто цена, которую я должен заплатить за .NET-Framework?
Изменить: 10 МБ не очень, я знаю. Но он будет запущен на Citrix Presentation Server (или XenApp, поскольку он вызывается сейчас), что означает, что на одном сервере есть ~ 30 пользователей. 30 пользователей * 10 МБ = 300 МБ только для этого небольшого приложения.
Спасибо заранее и наилучшие пожелания
Что бы вы ни делали, CLR придется загружать в процесс. 10 МБ - это не слишком много памяти, и не все 10 МБ - это частная память (возможно, большая часть ее разделяется). Кстати, это не похоже на "если ваше простое приложение занимает 10 МБ, что делает его вдвойне сложнее (по памяти) потребуется вдвое больше памяти (в основном, это область памяти CLR).
Я просто создал простое консольное приложение (for(;;);
). "Монитор ресурсов" показывает, что для него требуется ~ 2,5 МБ частной памяти и ~ 7 Мб доступной памяти.
Проблема с .net в этом отношении заключается в том, что память управляется GarbageCollector, которая будет принудительно собирать объекты без ссылок только тогда, когда они заканчиваются из пространства.
Вы также можете попробовать вручную запустить сборку мусора, см. здесь: MSDN
Что вы можете сделать, это:
Вы можете посмотреть что-то вроде статической привязки (http://www.codeproject.com/KB/cs/htmerge.aspx), но я не уверен, как это повлияет на требования к памяти.