Я использую AppDomain, чтобы загружать сборки, а затем выгружать их.Ассембли не разгружаются после выгрузки AppDomain?
Тем не менее, у меня проблема очень серьезная. После того, как AppDomain выгружается - я все еще вижу в обработчике процессов, что некоторые сборки загружаются несколько раз! Почему есть остатки загруженных сборок? Не AppDomain.Unload освобождает всю загруженную память AppDomain?
Вы можете увидеть в прилагаемом изображении:
Всего AppDomains являются 3 (я создал 3 AppDomains в жизненном цикле текущего процесса)
AppDomains: 1 (В настоящее время только 1 AppDomain существует)
И по какой-то причине, как вы можете видеть в загруженной DLL секции сильфона - сборки загружаются несколько раз в процессе ..
Код:
AppDomain fetcherDomain = AppDomain.CreateDomain("StatusFetcher");
try
{
var fetcher = (LocalStatusFetcher)fetcherDomain.CreateInstanceFromAndUnwrap(Assembly.GetExecutingAssembly().CodeBase, typeof(LocalStatusFetcher).FullName);
//doing some other stuff that is not interesting...
}
finally
{
AppDomain.Unload(fetcherDomain);
}
И да, LocalStatusFetcher делает унаследовать MarshalByRefObject ...
Возможно, вы также загружаете сборки в свой основной AppDomain. Кстати, разрешение изображения слишком низкое, и я ничего не вижу. –
Я думал об этом, но это не так (проверено с помощью отладчика). Кроме того, сборки появляются не один раз, только когда они загружаются в несколько AppDomains. Что касается качества изображения - это stackoverflow, который делает это, если вы берете URL-адрес изображения и вставляете его на другую вкладку, вы сможете увидеть его в порядке. –
Сборки, которые видны с вашего экрана, - это все сборки .NET Framework. Это происходит и с вашими сборками? –