Мое приложение ASP.NET - система B2B - начиналось с 35-40 МБ, когда к нему пришел первый пользователь. Через несколько минут приложение выросло до 180 МБ, при этом 2 или 3 пользователя переходили на страницы.
Прочитав лучшие практики разработки .net и рекомендации по производительности GC, я обнаружил, что проблема заключалась в дизайне моего приложения. Я не сразу согласился.
Я был в ужасе от того, как легко мы можем делать ошибки. Я отказался от многих функций и начал облегчать некоторые объекты. Значение:
Избегайте смешивания большого количества страниц и интеллектуальных и коммуникативных пользовательских элементов управления (тех, которые имеют множество функций, которые на самом деле больше всего существуют для каждой страницы, использующей этот элемент управления).
Хватит порождать универсальные функциональности на базовых классах. Иногда предпочтительнее повторить. Наследование это стоимость.
На некоторых сложных функциях я ставлю все на одну и ту же функцию. ДА, достигнув 100 строк больше всего.
Когда я прочитал эту рекомендацию по руководству по производительности .net, я не поверил, но она работает. Стеки вызовов - проблема, использование свойств класса поверх локальных переменных - проблема. Переменные уровня класса могут быть адом ...
Прекратите использовать сложные базовые классы, не должно быть никаких базовых классов с более чем 7 строками. Если вы распределите большие классы по всей структуре, у вас будут проблемы.
Я начинаю использовать больше статических объектов и функций. Я видел приложение, которое разработал другой парень. Все методы доступа к данным (вставка, обновление, удаление, выборка) были статическими. Приложение с большим количеством одновременных пользователей никогда не выходит за пределы 45 МБ.
Чтобы сохранить некоторые проекты, мне нравится шаблон состояния состояния. Я учился в реальном мире, но автор Найгард также согласен со мной в его книге: Выпуск ИТ - Разработка и развертывание программного обеспечения, готового к работе. Такой подход он называет моделью устойчивого состояния. Этот шаблон говорит, что нам может понадобиться что-то, чтобы освободить свободные ресурсы.
Возможно, вы захотите поиграть с файлом конфигурации машины. В атрибуте memoryLimit вы укажете процент памяти, который может быть достигнут до перезагрузки процесса.
Возможно, вы захотите поиграть с файлом конфигурации машины. По этому атрибуту GC будет определять поведение компьютера (рабочая станция GC и серверная GC). Эта опция также может существенно изменить поведение потребления памяти.
У меня был большой успех, когда я начал заботиться об этих предметах. Надеюсь, что это поможет.
- отредактировано 04-05-2014
Я изменил свое мнение о многих вещах из-за улучшений новых версий GC и достижений HTML 5 и MVC Framework.