Есть две вещи, которые могут потреблять память в плагине / модуле.Грубо говоря, это код (загрузка сборки в пространство процесса занимает память) и объекты (создание экземпляра чего-либо потребляет память).
будет (динамическая) память, занятаясборка, которая загружается с использованием отражения, будет выгружена, когда я удалю объект или нет.
Вызов Dispose
на IDisposable
ничего не делает с объектом, если речь идет о памяти.Он может освободить ресурсы, которые использует объект (например, если вы закроете файл, он избавится от открытых файловых дескрипторов), но он не освободит сам объект.IDisposable
не волшебная функция освобождения памяти - это просто метод интерфейса, который позволяет объекту понять, что он должен избавиться от ресурсов, которыми он владеет.
Чтобы освободить сам объект, выдолжен избавиться от всех ссылок на него (возможно, установить для них значение null или позволить им выпасть из стека вашей программы), и сборщик мусора должен в конечном итоге запустить эту память.
, если это не таквыгрузите и освободите память, есть ли способ удалить ее из памяти.
Если вас интересуют только такие ресурсы, как GUI и файловые дескрипторы, обязательно вызовите Dispose
.Вы всегда должны делать это:)
Если вас беспокоит память объекта, просто позвольте GC выполнить свою работу.Не надо приставать к этому.Пусть он работает сам по себе.
Если вас беспокоит память кода, вы должны выгрузить AppDomain
, в котором находится код. Если это ваше значение по умолчанию AppDomain
, вы не сможете выгрузить его безвыход из вашей программы.Вместо этого вы должны загрузить этот плагин в подпрограмму AppDomain
, которую вы создали во время выполнения.Затем вы можете получить код из своего пространства процессов, выгрузив подпрограмму AppDomain
.
См. ответ наивистов для получения информации об использовании подпрограммы AppDomain
.