Выгрузка сборки из памяти
В Win32 нужно было явно динамически загруженную DLL'ку отцеплять. А в dotNET выгружается ли сборка из памяти сама, если все ссылки на объект Assembly (и всё остальное из него) утрачены?
В .NET сборка остается не выгружается из памяти процесса до тех пор, пока существует домен приложения, в который она загружена. Поскольку в обычном приложении, как правило, один домен, который уничтожается при завершении процесса приложения, то ответ на твой вопрос - нет.
Может есть другое решение: Я с помощью JScriptCodeProvider создаю сборку (.CompiledAssembly) при CompilerParameters.GenerateInMemory=true, исполняю из неё что мне нужно и дальше хочу от неё избавиться.
Наверное, можно создавать сборку на диске, загружать её в другой домен, а потом уничтожать домен. Но это не хорошо - медленно (мне нужно много скриптов исполнять, скорость важна), да и криво как-то через файл.
Цитата: Hipson
А принудительно нельзя её как-нибудь выгрузить?
Документация четко говорит - либо вместе с доменом, либо никак :)
Цитата: Hipson
мне нужно много скриптов исполнять, скорость важна
Можно посмотреть в сторону DynamicMethod, которые можно генерировать в рантайме не прибегая к построению цельной сборки.
Объекты этого класса создаются в управляемой куче (реальные сборки, кажется, загружаются в неуправляемую кучу) и соответственно находятся под контролем сборщика мусора.
Сейчас посмотрел DynamicMethod. Так ли я понял - это средство программно сформировать кусок кода и исполнить? А у меня скрипты на JScript должны писать пользователи - они-то ни про какие DynamicMethod'ы не знают...