2013-09-17 2 views
4

Моя сборка загружается в несколько доменов приложений. Является ли Jit-ting для моей сборки выполненной один раз за процесс? Или это один раз за приложение?Будет ли моя сборка многократно использоваться в нескольких приложениях?

Или это нечто более сложное?

ответ

3

Это комплекс. Это говорит article MSDN

Если сборка загружается как домен нейтральным, то это означает его код можно использовать повторно в другом домене приложения. Если сборка загружена более чем в один AppDomain как связанная с доменом (по умолчанию), каждый AppDomain получает свою собственную копию кода. Это имеет несколько плохих характеристик производительности. Во-первых, стоимость процессора. Если для сборки есть собственное изображение, только первый AppDomain может использовать собственное изображение. Все остальные AppDomains должны будут JIT-компилировать код, который может привести к значительной стоимости процессора.

Далее, JIT-скомпилированный код находится в частной памяти, поэтому его нельзя использовать совместно с другими процессами или AppDomains. Если на сборке было изображение NGEN, тогда первый AppDomain использует изображение. Все остальные AppDomains должны JIT-компилировать код, а это значит, что также загружена DLL MSIL для этой сборки. Это худший возможный сценарий с точки зрения холодного запуска, поскольку доступ к диску для этой сборки удваивается.

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

+0

Спасибо - я получил то, что мне было нужно. – Rob

+0

Можете ли вы дать краткое резюме, если ссылка станет мертвой? – dtb

+0

@dtb - Я добавил сводку бит, в котором я хотел получить ответ за – Rob

Смежные вопросы