卸载使用 Assembly.LoadFrom() 加载的程序集进行比较测试
使用 Assembly.LoadFrom() 动态加载程序集会产生时间成本,您可能想测试这次或在重新加载程序集时进行比较。为此,您需要在初始加载后卸载程序集,这会引发有关如何卸载程序集以及如何垃圾收集分配的资源的问题。
卸载程序集
单独设置 assem = null 不足以卸载程序集。您可以使用 AssemblyLoadContext 类来管理程序集并显式卸载它:
AssemblyLoadContext loadContext = AssemblyLoadContext.GetLoadContext(assem); loadContext.Unload();
垃圾收集
垃圾收集器将自动回收分配给程序集的内存,并卸载后其类型。但是,如果您想显式触发垃圾回收,可以使用 GC.Collect() 方法。
使用 AppDomains 的替代方法
卸载程序集的替代方法就是使用AppDomains。每个AppDomain都是一个独立的执行环境,可以独立托管程序集。您可以创建一个新的 AppDomain,将程序集加载到其中,检索类型,然后卸载 AppDomain 以释放资源:
// Create a new AppDomain AppDomain dom = AppDomain.CreateDomain("SomeDomain"); // Load the assembly into the new AppDomain AssemblyName assemblyName = new AssemblyName(); assemblyName.CodeBase = pathToAssembly; Assembly assembly = dom.Load(assemblyName); // Get the types from the assembly Type[] types = assembly.GetTypes(); // Unload the AppDomain AppDomain.Unload(dom);
以上是如何高效卸载Assembly.LoadFrom()加载的程序集进行性能测试?的详细内容。更多信息请关注PHP中文网其他相关文章!