2009-07-22 3 views
4

У меня есть приложение, которое использует некоторые скрипты кода для генерации dll во время выполнения и вызывает их по мере необходимости и запускает некоторые вопросы, прежде чем я начну и код его!Динамическая загрузка и выгрузка dll, сгенерированного с использованием CSharpCodeProvider

Можно ли выгружать их из памяти, когда это не нужно? Если нет - то, что могло бы повлиять на производительность загрузки их в отдельные приложения и вызвать вызовы с использованием некоторых ipc и т. Д. - btw, это должно быть очень результативным/в реальном времени

В качестве альтернативы, как насчет загрузки нескольких экземпляров сгенерированная сборка (с разной версией #, конечно)? Я бы предположил, что если вы освободите все ссылки, которые не используются, это может быть выгружено gc/framework?

Кроме того, Q - возникли бы какие-либо «столкновения» (не уверены, что это правильное слово?) В этом сценарии?

ответ

6

Ассембли могут быть выгружены только с помощью всего AppDomain. В зависимости от того, сколько динамических сборок вам нужно загрузить, может быть нормально загрузить их в AppDomain по умолчанию и оставить их в памяти до закрытия приложения. Однако, если вы считаете, что у вас будет слишком много, и потребление памяти станет проблемой, вам нужно будет загрузить их в отдельный AppDomain, используйте AppDomain.DoCallBack, чтобы вызывать вызовы через границы AppDomain и периодически выгружать AppDomain. Например, хост T4 в Visual Studio загружает скомпилированные сборки в отдельный AppDomain для до 25 сеансов генерации кода, а затем выгружает AppDomain для перезаписи памяти.

Эффективное влияние дополнительного сортировки, которое должно произойти с отдельным AppDomain, будет незначительным по сравнению с воздействием компиляции и создания сборки «на лету». Это станет проблемой только в том случае, если количество междоменных вызовов велико. Вероятно, вам нужно будет проверить производительность AppDomain.DoCallBack, чтобы определить, будет ли производительность приемлемой для вашего сценария.

Смежные вопросы