Существует ли AppDomain для каждой программы на C #? - PullRequest
9 голосов
/ 22 апреля 2009

Существует ли домен приложений для каждой программы на C #, даже если мы специально не создаем домен приложений? Почему это требуется? Я читал о сторонних сборках, которые разрушают все приложение, если мы не загружаем их в отдельный домен приложений Я не очень хорошо понял это. Может кто-нибудь объяснить это тоже.

Ответы [ 5 ]

15 голосов
/ 22 апреля 2009

AppDomain в значительной степени похож на процесс, это инфраструктура, в которой работает ваше приложение. Сборка .NET должна быть загружена в AppDomain для запуска. Не требуется загружать сборки сторонних производителей в отдельные AppDomains, но если вы это сделаете, это обеспечивает изоляцию между ними (как два отдельных процесса), и сбой в одном не повлияет на другой. Домены приложений могут быть выгружены независимо.

Например, SQL Server использует AppDomain s для безопасной загрузки сборок CLR в своем процессе.

3 голосов
/ 22 апреля 2009

Я читал о сторонних сборках, вызывающих сбой, если мы не используем AppDomain

Я думаю, вы говорите о загрузке других сборок в отдельные домены приложения. Таким образом они могут быть изолированы от вашего адресного пространства, чтобы предотвратить сбои в их коде, влияющие на вас. Стоимость заключается в том, что связь со сборкой в ​​отдельном домене приложения является более сложной и требует штрафных санкций, поскольку все вызовы должны быть военным путем за пределами границы домена приложения.

Это довольно продвинутая тема, я бы рекомендовал прочитать ее в Рихтер (другие книги доступны).

2 голосов
/ 22 апреля 2009

Каждое приложение имеет хотя бы один домен приложения, да.

Я не знаю, что означает примечание о сторонних сборках.

1 голос
/ 22 апреля 2009

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

Сбой означает, что сторонняя сборка (то есть плагин) будет аварийно завершать работу всего вашего приложения, если оно не будет загружено в отдельный домен приложения. Поэтому рекомендуется загружать плагины в отдельный домен приложения, поскольку сбой в домене приложения приведет к сбою только этого домена приложения, а не других доменов. В блоге CLR Add-In есть сообщения на эту тему.

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

1 голос
/ 22 апреля 2009

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

По сути, это контейнер, в котором выполняется код, работающий с определенным доверием.

...