C # 2k8 сократить использование памяти (простое приложение занимает 10 МБ)

2

У меня есть простое приложение С# 2008, которое отображает png-изображение и обрабатывает некоторые простые MouseEvents.

Хотя он ничего сложного, он использует не менее 9,5-10 МБ памяти (как показано в диспетчере задач)

Я уже отключил ведение журнала ошибок, а также удалил символы отладки и трассировки. "Оптимизировать код" активируется.

Есть ли способ уменьшить это? Может быть, с некоторыми опциями в качестве встроенного компиляции фреймворка (это даже существует для .NET?)

Любая идея? Или это просто цена, которую я должен заплатить за .NET-Framework?

Изменить: 10 МБ не очень, я знаю. Но он будет запущен на Citrix Presentation Server (или XenApp, поскольку он вызывается сейчас), что означает, что на одном сервере есть ~ 30 пользователей. 30 пользователей * 10 МБ = 300 МБ только для этого небольшого приложения.

Спасибо заранее и наилучшие пожелания

  • 0
    Есть ли какая-то конкретная причина, почему это проблема ? Или это просто любопытство?
Теги:
optimization
memory-management
visual-studio-2008

3 ответа

10
Лучший ответ

Что бы вы ни делали, CLR придется загружать в процесс. 10 МБ - это не слишком много памяти, и не все 10 МБ - это частная память (возможно, большая часть ее разделяется). Кстати, это не похоже на "если ваше простое приложение занимает 10 МБ, что делает его вдвойне сложнее (по памяти) потребуется вдвое больше памяти (в основном, это область памяти CLR).

Я просто создал простое консольное приложение (for(;;);). "Монитор ресурсов" показывает, что для него требуется ~ 2,5 МБ частной памяти и ~ 7 Мб доступной памяти.

  • 7
    10Mb - ничто для современной системы. Если вы не создаете что-то вроде операционной системы, видеоигры или rdbms, дни, когда ваше приложение должно быть в нескольких килограммах, прошли.
  • 0
    @ Джоэл: абсолютно.
Показать ещё 3 комментария
0

Проблема с .net в этом отношении заключается в том, что память управляется GarbageCollector, которая будет принудительно собирать объекты без ссылок только тогда, когда они заканчиваются из пространства.

Вы также можете попробовать вручную запустить сборку мусора, см. здесь: MSDN

Что вы можете сделать, это:

  • Попытайтесь сохранить ссылки на объекты как можно короче
  • уменьшить количество используемых системных библиотек
  • взгляните на .NET Bootstrapping
  • взгляните на предварительную компиляцию ваших сборок через ngen.exe
  • используйте ассемблер:-) (просто шучу)
0

Вы можете посмотреть что-то вроде статической привязки (http://www.codeproject.com/KB/cs/htmerge.aspx), но я не уверен, как это повлияет на требования к памяти.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню