Как я могу загрузить нативное изображение .NET (NGEN) в несколько приложений без указания домена нейтралитета?

StackOverflow https://stackoverflow.com/questions/4503888

Вопрос

Ngen + appdomain Проблема здесь.

Я работаю над некоторыми изменениями приложений, которые вращаются вокруг создания нативных изображений правильно загружаться, чтобы предотвратить ужасное время JIT в нашем приложении .NET. Некоторые детали были простыми, но любые сборки, которые должны загружаться в приложениях (которые наше приложение должно использовать по разным причинам), будут загружать только свое собственное изображение в первый раз, и на последующие нагрузки (в том, что сейчас является новым применением)) Изображение отвергается, и JIT происходит.

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

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

Эта статья MSDN содержит следующую цитату:

Альтернативный подход к возвращению к компиляции JIT заключается в загрузке различных копий нативного изображения в каждый приложение, которое загружает соответствующую сборку как специфичную для домена. Тем не менее, этот подход потребует каждой копии изображения NGEN, за исключением первого, будет загружено по другому адресу, от его предпочтительного базового адреса. Таким образом, все эти копии изображения NGEN потребуют их адреса.

Это было бы идеально для моих потребностей, но эта статья была единственным местом, где я когда -либо видел, и я не уверен, как она будет реализована.

Заранее спасибо за проницательность, и спасибо за просмотр.

Это было полезно?

Решение

Я надеялся, что нормальное ограничение не будет применяться до тех пор, пока я разгрузил первое использование нативного изображения, прежде чем я попытался загрузить его снова, но это привело к отказу, как если попытаться загрузить собственное изображение одновременно.

Это работает, но вы должны ждать, пока нативное изображение будет фактически разгружено. Когда Appdomain.Unload возвращается, AppDomain не полностью выгружен. Приложение будет полностью разгружен (вместе с собственными изображениями) только после следующего полного GC.

Эта статья MSDN содержит следующую цитату:

Сурупа размышляла о возможной альтернативной реализации в CLR, но в настоящее время это не реализовано.

Спасибо Lakshan Fernando Clr Team

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top