Как сохранить сборки ASP.NET в AppDomain в живых?

Сценарий: у меня есть приложение ASP.NET корпоративного уровня n-уровня, развернутое с использованием проектов веб-развертывания. Все уровни производят независимые сборки, которые потребляются приложением ASP.NET.

Проблема. Когда я запускаю приложение. в первый раз после развертывания требуется много времени для загрузки зависимых сборок в памяти. Но однажды загрузили его быстрое приложение для освещения. В случае, если пользователи не обращаются к приложению, IIS выгружает сборки из памяти, и когда пользователь пытается получить доступ к приложению в более позднем экземпляре, он снова загружает все сборки, занимая столько же времени, сколько и загружает делает это впервые.

Я ищу решение, которое позволяет мне сохранять загруженные в память сборки, постоянно сохраняя изменчивость характера сборок в отношении места жительства памяти.

Или любое другое решение, которое позволяет моим пользователям с радостью использовать приложение, разрешающее указанную проблему.

В IIS 6 перейдите в раздел «Пулы приложений» и щелкните правой кнопкой мыши> Свойства в пуле, на котором размещено приложение ASP.NET. Перейдите на вкладку «Производительность» и снимите флажок «Отключить рабочие процессы после простоя для:»

В IIS 7 перейдите в панель «Соединения» и найдите «Пулы приложений» и выберите «Дополнительные настройки» для пула, в котором размещено ваше приложение. Найдите свойство «Idle Timeout» и установите его на «0» (это отключает его).

По умолчанию используется 20 минут бездействия. Если снять флажок, как только ваш AppDomain будет загружен рабочим процессом , он никогда не умрет (если вы не убьете этот процесс или что-то в этом роде). По умолчанию IIS будет перерабатывать процесс, когда он достигнет некоторого предела, например, колпачок памяти, но он также запустит новый и «переполнит» все входящие запросы до тех пор, пока старый не будет использован, чтобы свести к минимуму срыв.

Я также написал небольшой class c #, который будет поддерживать ваше приложение ASP.NET в целом ( альтернативная архивная версия ) при обычных обстоятельствах. Поскольку он работает в приложении, очевидно, что он не может остановить IIS или что-то еще от явного убийства процесса, но он будет поддерживать приложение «горячим», например, приложение никогда не будет простаивать достаточно долго, чтобы IIS решил отключить его ,

Если у вас нет прямого контроля над конфигурацией IIS (например, с общим хостом), лучше всего иметь небольшое приложение, работающее в отдельной системе – например, постоянная рабочая станция, которая каждые 6 минут попадает на ваш сайт пул приложений от тайм-аута. Ничего особенного – простой цикл WebRequest и while () в консольном приложении.

Одним из преимуществ ASP.net является возможность создания статических (общих) экземпляров объектов.

Чтобы избежать необходимости внешнего процесса, вы можете создать статический таймер в (на пример) global.asax, который вызывает страницу в домене с помощью простого WebRequest. Таким образом, сайт сохраняется до тех пор, пока не будет выполнен ручной сброс пула.

Я написал небольшое консольное приложение на C #, которое хранит мои 4 сайта каждые 10 минут через планировщик задач Windows. Жизнь снова хороша. Мы не запускаем приложение с 2-5 утра, так что сервисы могут делать какие-либо очистки памяти, если это даже имеет значение. для наших сайтов в любом случае редко бывает кто-то в эти часы.

  • mscorlib.dll & System.dll
  • Инициализировать библиотеку при загрузке сборки
  • Динамически заменить содержимое метода C #?
  • Размер сборки .NET влияет на производительность?
  • Дополнительная информация о макете памяти исполняемой программы (процесса)
  • В чем разница между MOV и LEA?
  • Есть ли альтернатива Maven или порт для мира .NET?
  • x86_64 - Условия сборки и выход из строя
  • Код C ++ для проверки гипотезы Collatz быстрее, чем assembly вручную - почему?
  • Примеры предварительной выборки?
  • Возможно ли одноуровневое многоязычное развертывание Windows Forms (ILMerge и спутниковые сборки / локализация)?
  • Давайте будем гением компьютера.