Ну, я думаю, что нить гладко подходила к окончательному выводу, но в итоге все было иначе.
Я попытаюсь ответить на вопрос, основываясь на моем понимании и использовании того, что я только что прочитал на других веб-сайтах.
Прежде всего, я сам стараюсь избегать термина recycle, отличного от «Пулы приложений», поскольку это может привести кого-то в замешательство. Теперь, добравшись до процесса, пулов и AppDomain, я вижу картинку следующим образом:
Пул приложений, короче говоря, является областью памяти, которая поддерживается и выполняется процессом, называемым W3WP.exe, или Рабочим процессом. Рециркуляция пула приложений означает остановку этого процесса, удаление его из памяти и создание нового рабочего процесса с новым назначенным идентификатором процесса.
Что касается доменов приложений, я рассматриваю это как подмножества областей памяти в пределах вышеупомянутой области, которая играет роль контейнера. Другими словами, процесс в памяти, в данном случае W3WP.exe, является областью макропамяти для приложений, в которых хранятся области подмножеств, называемые доменами приложений. Сказав это, один процесс в памяти может хранить разные домены приложений, по одному для каждого приложения, назначенного для запуска в данном пуле приложений.
Когда дело доходит до утилизации, как я изначально говорил, это то, что я сам резервирую только для пулов приложений. Для доменов приложений я предпочитаю использовать термин «перезапуск», чтобы избежать неправильного представления. Исходя из этого, перезапуск AppDomain означает запуск поверх данного приложения с вновь добавленными настройками, например обновление существующей конфигурации. Это происходит в границах этого подрегиона памяти, называемого AppDomain, который в конечном итоге находится в процессе, связанном с соответствующим пулом приложений. Эти новые настройки могут быть получены из файлов, таких как
web.config,
machine.config,
global.asax,
Бин каталог,
App_Code,
и могут быть другие.
AppDomain изолированы друг от друга, что имеет смысл. Если это не так, если изменения в файле web.config, скажем, приложения 1, требуют повторного использования пула, все другие приложения, назначенные этому пулу, будут перезапущены, что определенно нежелательно ни Microsoft, ни кем-либо еще.
Обобщая мою точку зрения,
- Процесс (W3WP.exe)
- AppDomain 1
- AppDomain 2
- AppDomain 3
- AppDomain n
n = количество назначенных приложений в пул приложений, управляемый данным W3WP.exe
- Процессы - это области памяти, изолированные друг от друга
- Домены приложений - это области вспомогательной памяти, изолированные друг от друга в рамках одного процесса
- Глобальные изменения настроек IIS могут потребовать перезапуска пула приложений (уничтожение и запуск нового рабочего процесса, W3WP.exe)
- Настройки всего приложения изменяют проблемы доменов приложений, и они могут быть перезапущены после изменений в некоторых конкретных файлах, таких как приведенные выше
Для получения дополнительной информации, я рекомендую:
http://blogs.msdn.com/b/david.wang/archive/2006/03/12/thoughts-on-iis-configuration-changes-and-when-it-takes-effect.aspx
Что вызывает перезапуск пула приложений в IIS?
http://blogs.msdn.com/b/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx
С уважением, из Бразилии!