我正在使用 AppDomain 来加载程序集然后卸载它们。
但是,我遇到了一个非常严重的问题。卸载 AppDomain 后 - 我仍然可以在进程资源管理器中看到某些程序集被多次加载!为什么有剩余的加载程序集?AppDomain.Unload 不会释放所有 AppDomain 加载的内存吗?
您可以在附图中看到:
总 AppDomain 为 3(我在进程的生命周期中创建了 3 个 AppDomain)
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...