Как разгрузить блок от основного AppDomain?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

42
задан Ray Vega 13 December 2010 в 18:00
поделиться

5 ответов

Для .net ядра версий 3.0 и позже:

можно теперь разгрузить блоки. Обратите внимание, что appdomains больше не доступны в .net ядре. Вместо этого можно создать один или несколько AssemblyLoadContext, загрузить блоки через тот контекст, затем разгрузить тот контекст. См. AssemblyLoadContext, или это учебное руководство, которое моделирует загрузку плагина, тогда разгружающего его .

Для .net версий прежде .net базовые 3, включая netframework 4 и ниже

Вы не можете разгрузить блок от appdomain. Можно уничтожить appdomains, но как только блок загружается в appdomain, это там для жизни appdomain.

Видят объяснение Jason Zander , Почему не там блок. Разгрузить метод?

, Если Вы используете 3.5, можно использовать Платформу AddIn, чтобы облегчить управлять/называть в различный AppDomains (который Вы можете разгружать, разгружая все блоки). При использовании версий перед этим необходимо создать новый appdomain сами для разгрузки его.

34
ответ дан Philip Rieck 26 November 2019 в 23:39
поделиться

Вы не можете разгрузить блок, не разгружая целый AppDomain. Вот то, почему :

  1. Вы выполняете тот код в домене приложения. Это означает, что существуют потенциально сайты вызова и стеки вызовов с адресами в них, которые ожидают продолжать работать.

  2. Говорят, что Вам действительно удавалось отследить все дескрипторы и ссылки на уже рабочий код блоком. Принятие Вас не сделало ngen код, как только Вы успешно освободили блок, Вы только освободили метаданные и IL. Код JIT'd все еще выделяется в "куче" загрузчика домена приложения (методы JIT'd выделяются последовательно в буфере в порядке, в котором их называют).

  3. заключительная проблема имеет отношение к коду, который был загружен совместно использованный, иначе более официально знайте как "домен, нейтральный" (проверьте/, совместно использованный на ngen инструмент). В этом режиме код для блока сгенерирован, чтобы быть выполненным от любого домена приложения (ничто трудно соединенное проводом).

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

15
ответ дан Mark Cidade 26 November 2019 в 23:39
поделиться

Если Вы хотите иметь временный код, который может быть разгружен впоследствии, в зависимости от Ваших потребностей DynamicMethod, класс мог бы сделать то, что Вы хотите. Это не дает Вам классы, все же.

4
ответ дан Khoth 26 November 2019 в 23:39
поделиться

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

10
ответ дан BartoszKP 26 November 2019 в 23:39
поделиться

Вот ХОРОШИЙ пример, как скомпилировать и запустить dll во время выполнения, а затем выгрузить все ресурсы: http://www.west-wind.com/presentations/dynamicCode/DynamicCode.htm

1
ответ дан 26 November 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: