Страницы

Поиск по вопросам

воскресенье, 15 марта 2020 г.

Как сделать сборку общей для всех доменов?

#net


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


Ответы

Ответ 1



Зависит от того, что подразумевается под "загружаться". По умолчанию сборки загружаются с диска в память только один раз. Это можно проверить в окне Debug/Windows/Modules - сборка будет упомянута несколько раз, но значение в колонке Address для нее будет одним и тем же для разных доменов. Если этого недостаточно, то можно: Отметить точку входа вашего приложения как [LoaderOptimization(LoaderOptimization.MultiDomain)] - это позволит максимально шарить загруженные ресурсы между доменами. Под шарингом ресурсов подразумевается: возможность дополнительным доменам использовать готовые native image - результаты предварительного прохода NGEN. шаринг результатов JIT. Установить сборку в GAC и прогнать ее NGEN-ом - это тогда сборка будет загружаться в память не только один раз для различных AppDomain но и один раз для одновременно запущенных приложений, которые ее испольуют. Это обычный подход при хостинге большого количества одинаковых приложений - например, одинаковых сайтов на одном сервере.

Ответ 2



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

Комментариев нет:

Отправить комментарий