Подтвердить что ты не робот

Что такое утилизация Addomain

Я пытаюсь выяснить, что такое утилизация Appdomain? Когда страница ASPX запрашивается в первый раз из приложения DotNet, я понимаю, что создается приложение для этого приложения, и необходимые сборки загружаются в это приложение, и запрос будет обслуживаться. Теперь, если файл web.config или содержимое папки bin и т.д. Изменены, приложениеdomain будет "переработано". Мой вопрос заключается в том, что в конце процесса утилизации будет загружена аппроксимация узлов и готова выполнить следующий запрос? или нужно запросить страницу для запуска сборок?

4b9b3361

Ответ 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, и они могут быть перезапущены после изменений в некоторых определенных файлах, таких как те, которые указаны выше

Для получения дополнительной информации я рекомендую:

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

Отношения с Бразилией!

Ответ 2

Взгляните на это - это может объяснить это:

http://weblogs.asp.net/owscott/archive/2006/02/21/ASP.NET-v2.0-2D00-AppDomain- recycles_2C00_-более-общего, чем-before.aspx # 440333

В общем. То, что называется "первым ударом" на веб-сайте 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, ваше приложение будет перерабатывать, даже если оно скомпилировано.