Почему создание домена приложения стоит так дорого? - PullRequest
0 голосов
/ 12 октября 2010

Каковы точные причины, по которым создание домена приложения стоит так дорого?Они совместно используют одну и ту же кучу, одни и те же сборки и т. Д. Что именно необходимо сделать CLR, который потребляет столько ресурсов?

Мы видели сценарии, в которых доступ к типу / экземпляру из другого домена приложения занимает 10 секунд. (обновление: все необходимые сборки, которые будут использоваться обоими доменами приложений, уже загружены в текущий домен приложений, который порождает новый домен приложений, кроме одного) .Интересно, что это происходит только при первом доступе.Весь последующий доступ очень быстрый.

Обновление 2:

Мы прикрепили профилировщик выборки VS 2010, и вот результат:

Функции, выполняющие большую часть индивидуальной работы:System.AddIn.Pipeline.FrameworkElementAdapters.ViewToContractAdapter (класс System.Windows.FrameworkElement) Эксклюзивные образцы% 43,02

(да, мы используем здесь API расширения WPF)

Ответы [ 2 ]

2 голосов
/ 12 октября 2010

Есть чертовски много сантехники, которую нужно инициализировать для домена приложения. Тем более что они не совместно используют одни и те же кучи или один и тот же набор сборок. Деталь, которая не соответствует твоему вопросу. Их ценность в том, что они все еще стоят на лот меньше, чем создание нового процесса.

После просмотра редактирования: 10 секунд - это довольно много, и их нелегко объяснить, кроме того, что домен приложения делает холодный старт для сборок, которые необходимо загрузить. Дисковые или сетевые издержки.

0 голосов
/ 22 апреля 2013

Это не полное объяснение проблемы, а полезные советы:

  1. Запустите приложение без хоста VisualStudio (например, Ctrl + F5).
  2. Используйте атрибут [LoaderOptimization(LoaderOptimization.MultiDomainHost)] в исходной сети.

Используя эти оптимизации, используются следующие методы:

FrameworkElementAdapters.ViewToContractAdapter
FrameworkElementAdapters.ContractToViewAdapter

работает намного быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...