Пример кода нескольких доменов приложений .NET - PullRequest
7 голосов
/ 03 марта 2010

С Что такое домен приложений .NET? :

Вы можете запустить несколько доменов приложений в одном процессе с одинаковым уровнем изоляции, который существовал бы в отдельных процессах, но без дополнительных затрат на выполнение вызовов между процессами или переключение между процессами.

Я хотел бы больше узнать о том, как / почему можно использовать несколько доменов приложений в своих приложениях. Кто-нибудь может привести пример с реальными фрагментами кода?

Ответы [ 4 ]

5 голосов
/ 03 марта 2010

Чтение MSDN фактически дает некоторую полезную информацию.

http://msdn.microsoft.com/en-us/library/system.appdomain.aspx

- Dan

3 голосов
/ 03 марта 2010

Я использовал это в следующем контексте (сейчас у меня нет кода, чтобы написать)

  • Создание нового домена приложений (например, appDomainX)
  • Создать новый экземпляр объекта, используя этот новый домен
  • Новый объект (жил в новом объекте) загружает кучу сборок
  • Подумайте о них, чтобы собрать метрики
  • Получите полученный результат
  • Выгрузить приложениеDomainX

Преимущество этого заключается в том, что вы можете выгружать сборки, загруженные во вновь созданный домен приложений. Если вы делаете это на своем главном домене приложений снова и снова, загружая больше сборок, ваш домен приложений будет чудовищно расти. Создание отдельного домена приложений позволяет вам выгружать после каждой проверки, которая, в свою очередь, выгружает все сборки, загруженные в этот домен, поэтому основной домен приложений остается чистым.

1 голос
/ 03 марта 2010

Возможно, вы захотите использовать один для имитации обработки IIS. Вам нужен длительный процесс, который приводит к утечке памяти. Вы можете отслеживать, сколько запросов в AD обработано, и, достигнув порогового значения, вы получите новый. Когда старый завершит всю обработку, выгрузите его и дайте CLR очистить некоторые ненужные приложения.

Не спрашивайте меня, откуда я это знаю. :)

Вы также можете сделать это, если хотите запускать код в разных контекстах безопасности.

1 голос
/ 03 марта 2010

Я работал над (в основном) программным обеспечением C ++, которое позволяло пользователям писать сценарии для автоматизации приложения с использованием C # или VB.NET.Приложение также имеет несколько компонентов, написанных на C #.Он использовал один AppDomain для компонентов программы, а другой - для песочницы сценариев.

Первоначальная реализация сценариев создала AppDomain для каждого сценария, но это оказалось слишком медленным, и это предотвратило некоторые полезные действия сценария, поэтомумы пошли на один постоянный домен приложений для механизма сценариев.

...