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