Как сохранить сборки 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 утра, так что сервисы могут делать какие-либо очистки памяти, если это даже имеет значение. для наших сайтов в любом случае редко бывает кто-то в эти часы.

  • Дополнительная информация о макете памяти исполняемой программы (процесса)
  • Почему медленная инструкция цикла? Не удалось ли Intel эффективно внедрить его?
  • Очень быстро memcpy для обработки изображений?
  • Примеры предварительной выборки?
  • Как загрузить сборку во время выполнения перед событием AssemblyResolve?
  • Вызов функции стандартной библиотеки C из asm в Visual Studio
  • Что регистрирует сохранение в соглашении вызова ARM C?
  • Как вы прокручиваете загруженные в настоящее время сборки?
  • Почему mulss занимает всего 3 цикла на Хасуэлле, отличном от таблиц инструкций Агнера?
  • Как объединить несколько сборок в один?
  • Самый быстрый способ вычисления 128-битного целого по модулю 64-разрядного целого числа
  • Interesting Posts

    Требуется ли последняя запятая в C enum?

    Каков наилучший способ реализации streamа социальной активности?

    Robocopy: показывать пропущенные файлы и файлы с ошибкой при копировании

    Папки макета Android: макет, макет-порт, макет-земля

    Горячая клавиша для переключения между режимами входного входа Hangul и Latin с Windows 7 Korean IME?

    Как установить максимальное количество строк в таблице MySQL?

    Google DFP – изменение размера пользовательского объявления SafeFrame внешнего контейнера iframe изнутри (развернуть объявление)

    Передача списка значений в fragment-шейдер

    Как заменить аудиовыход левого и правого динамиков?

    Восстановить флэш-диск

    Что такое эквивалент async / await сервера ThreadPool?

    Обновить переменную родительской области в угловом

    Qt-сигналы (QueuedConnection и DirectConnection)

    Состояние сеанса может использоваться только тогда, когда для параметра enableSessionState установлено значение true либо в конфигурации

    Рекурсивно удалять пустые каталоги в Windows

    Давайте будем гением компьютера.