Из того, что Домен приложения.NET?:
Можно выполнить несколько доменов приложения в единственном процессе с тем же уровнем изоляции, которая существовала бы в отдельных процессах, но не подвергаясь дополнительным издержкам совершения межпроцессных звонков или переключения между процессами.
Я хотел бы понять больше о том, как/почему можно было бы на самом деле использовать несколько AppDomains в их приложении. Кто-либо может предоставить примеру фактические фрагменты кода?
Чтение MSDN действительно дает некоторую хорошую информацию.
http://msdn.microsoft.com/en-us/library/system.appdomain.aspx
-Dan
Я использовал это в следующем контексте (не иметь под рукой код для публикации)
Преимущество этого состоит в том, что вы можете выгружать сборки, загруженные во вновь созданный AppDomain. Если вы делаете это на своем основном домене приложений снова и снова, загружая больше сборок, ваш домен приложений будет чудовищно расти. Создание отдельного домена приложений позволяет выполнять выгрузку после каждой проверки, которая, в свою очередь, выгружает все сборки, загруженные в этот домен, поэтому основной домен приложений остается чистым.
Я работал над частью (в основном) программного обеспечения C ++, которое позволяло пользователям писать сценарии для автоматизации приложения с помощью C # или VB.NET. В приложении также было несколько компонентов, написанных на C #. Он использовал один домен приложений для компонентов программы, а другой - для изолирования скриптов.
Первоначальная реализация сценариев создавала домен приложений для каждого сценария, но это оказалось слишком медленным и препятствовало некоторым полезным действиям сценария, поэтому мы перешли к одному постоянному домену приложений для механизма сценариев.
Вы можете использовать один для моделирования обработки IIS. Вам нужен длительный процесс, который приводит к утечке памяти. Вы можете отслеживать, сколько запросов в AD было обработано и один из которых вы достигли порогового значения, и запускайте новый. Когда старый закончит всю обработку, выгрузите его и позвольте CLR очистить часть ненужного приложения.
Не спрашивайте, откуда я это знаю. :)
Вы также можете сделать это, если хотите запускать код в другом контексте безопасности.