Должен ли AppDomain иметь короткую или долгую жизнь? - PullRequest
1 голос
/ 24 мая 2019

Я работаю над системой расширения приложений (плагины), где каждый плагин должен быть выделен в отдельный AppDomain.Работа должна быть завершена, но есть еще один важный вопрос о том, как долго должен жить AppDomain.

Система используется на стороне сервера, и она регулярно использует плагины, скажем, она должнавызывайте каждый плагин каждые десять минут один раз.В этом случае, принимая во внимание все виды издержек AppDomain с, что более уместно?

  1. Создайте экземпляры AppDomain один раз и сохраняйте их живыми в течение всего жизненного циклаприложение (поэтому каждый вызов плагина будет входить в один и тот же AppDomain для каждого плагина).
  2. Создать Appdomain экземпляры для каждого вызова плагина, а затем Unload их.

1 Ответ

1 голос
/ 24 мая 2019

Использование AppDomain.CreateDomain(...):

1). создать новый домен приложения для каждого плагина и поддерживать его в течение всего времени жизни приложения

  • плюсы: нет затрат на: создание домена приложения, загрузку .dll и т. Д. При каждом вызове плагина
  • минусы: все .dll из всех доменов приложений потребляют память в течение всего времени жизни приложения; нужно быть осторожным со статическими переменными; нет песочницы между вызовами (если кто-то сломает домен приложения, тогда все вызовы не будут выполнены)

2). создавать новый домен приложения для каждого вызова плагина и выгружать после

  • плюсы: песочница между звонками; освобождение памяти между вызовами
  • cons: накладные расходы на: создание домена приложения, загрузку .dll и т. Д. При каждом вызове плагина

Если у вас много вызовов на плагин и большая партия .dll для него, используйте опцию 1

Если у вас много вызовов на плагин и небольшая партия .dll для него, используйте опцию 2

Если у вас есть несколько вызовов на плагин и небольшая партия .dll для него, используйте опцию 2

Если вы хотите изолированную среду между вызовами, используйте опцию 2

...