Я пытаюсь выяснить, что такое утилизация Appdomain? Когда страница ASPX запрашивается в первый раз из приложения DotNet, я понимаю, что создается приложение для этого приложения, и необходимые сборки загружаются в это приложение, и запрос будет обслуживаться. Теперь, если файл web.config или содержимое папки bin и т.д. Изменены, приложениеdomain будет "переработано". Мой вопрос заключается в том, что в конце процесса утилизации будет загружена аппроксимация узлов и готова выполнить следующий запрос? или нужно запросить страницу для запуска сборок?
Что такое утилизация Addomain
Ответ 1
Ну, я думаю, что поток прошел гладко до окончательного вывода, но в конце концов это было иначе.
Я постараюсь ответить на вопрос, исходя из моего понимания и использования того, что я только что прочитал на других веб-сайтах.
Прежде всего, я сам стараюсь избегать использования термина, кроме пулов приложений, так как это может привести к запутанности. Теперь, перейдя к процессам, пулам и AppDomain, я вижу изображение следующим образом:
Пул приложений - это, короче говоря, область памяти, которая поддерживается и запускается процессом W3WP.exe, который называется Worker Process. Перезапуск пула приложений означает, что этот процесс прекращается, устраняя его из памяти, а затем создавая новый рабочий процесс с новым назначенным идентификатором процесса.
Что касается доменов приложений, я рассматриваю их как подмножества областей памяти в пределах вышеупомянутого региона, который играет роль контейнера. Другими словами, процесс в памяти, W3WP.exe в этом случае, является областью макросохранения для приложений, в которых хранятся области подмножества, называемые областями приложений. Сказав это, один процесс в памяти может хранить разные Домены приложений, по одному для каждого приложения, которое назначено для запуска в пределах данного пула приложений.
Когда речь идет об утилизации, как я изначально сказал, это то, что я сам резервирую только для приложений. Для AppDomains я предпочитаю использовать термин "перезагрузка", чтобы избежать неправильного понимания. Исходя из этого, перезапуск 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
- Процессы - это области памяти, изолированные друг от друга.
- AppDomains являются областями под-памяти, изолированными друг от друга, в рамках одного процесса
- Для глобальных изменений параметров IIS может потребоваться перезагрузка пула приложений (убийство и запуск нового рабочего процесса, W3WP.exe)
- Изменения в приложении изменяют проблемы AppDomains, и они могут быть перезапущены после изменений в некоторых определенных файлах, таких как те, которые указаны выше
Для получения дополнительной информации я рекомендую:
Что заставляет пул приложений в IIS перерабатывать?
Отношения с Бразилией!
Ответ 2
Взгляните на это - это может объяснить это:
В общем. То, что называется "первым ударом" на веб-сайте ASP.NET, обычно занимает больше времени из-за компиляции и создания AppDomain.
Всякий раз, когда вы развертываете сайт, обязательно используйте функцию "Опубликовать веб-сайт" в Visual Studio, чтобы предварительно скомпилировать ваш сайт. Затем штраф "первого удара" уменьшается. И не забудьте установить конфигурацию Release, а не Debug!
Ответ 3
Recycle завершает процесс, поддерживающий appdomain. Вы заметите, что PID изменяется при его переработке.
Разгрузка AppDomin просто выгружает все сборки в AppDomain, которые затем могут быть повторно использованы.
Важно помнить, что после того, как CLR загружается в процесс, его нельзя удалить. Поэтому, если вам нужно что-то сделать, как только CLR загрузится, просто выгрузка AppDomain не поможет, потому что CLR не будет перезагружен.
Также не то, что IIS - это не единственный процесс, который может размещать AppDomain - любой процесс может, и вы не всегда хотите убить весь процесс, просто чтобы выгрузить ваши сборки.
Ответ 4
Если ваши страницы "обновляемы", они должны быть скомпилированы перед использованием. Это означает, что да, по первому запросу сборки загружаются, компилируются и готовятся к доступу. Всякий раз, когда эти файлы изменяются (даже некоторое программное обеспечение для вирусов может инициировать это, изменяя дату изменения файлов!), Appdomain получает рециркуляцию.
Вы можете настроить веб-приложение, чтобы оно не было обновляемым. Все скомпилируется в DLL, и вы не увидите никаких файлов .ASPX или .CS в виртуальном каталоге. Это делает ваш код сложнее обновить (нужно добавить дополнительный текст на свою веб-страницу? Время перекомпиляции!), Но это увеличивает доступность вашего веб-приложения.
Однако это все равно не помешает повторному использованию вашего веб-приложения, если какой-либо из файлов будет изменен. Например, если вы отредактируете web.config, ваше приложение будет перерабатывать, даже если оно скомпилировано.