为了测试加载 DLL 后 GetTypes() 所花费的时间,让我们探索一下卸载和重新加载 DLL 的过程DLL。
当程序集被加载时使用 Assembly.LoadFrom() 加载后,它会添加到 AppDomain 的程序集列表中。要卸载它,Assembly 或 AppDomain 中没有显式的方法用于卸载。不过,您可以创建一个新的 AppDomain 来加载程序集,然后卸载 AppDomain 以释放资源。
要重新加载 DLL,请按照以下步骤操作:
string file = "path/to/assembly.dll"; // First AppDomain AppDomain dom1 = AppDomain.CreateDomain("domain1"); Assembly assem1 = dom1.Load(file); Stopwatch sw1 = Stopwatch.StartNew(); var types1 = assem1.GetTypes(); sw1.Stop(); double time1 = sw1.Elapsed.TotalMilliseconds; AppDomain.Unload(dom1); // Second AppDomain AppDomain dom2 = AppDomain.CreateDomain("domain2"); Assembly assem2 = dom2.Load(file); Stopwatch sw2 = Stopwatch.StartNew(); var types2 = assem2.GetTypes(); sw2.Stop(); double time2 = sw2.Elapsed.TotalMilliseconds; AppDomain.Unload(dom2); Console.WriteLine($"First Load: {time1} milliseconds"); Console.WriteLine($"Second Load: {time2} milliseconds");
此示例创建两个 AppDomain 并将 DLL 加载到每个应用程序域中。然后,它测量两个实例的 GetTypes() 所花费的时间。时间上的差异可以表明重新加载 DLL 所产生的开销。
assem = null 不足以释放分配给程序集的资源。显式调用垃圾收集器也无济于事,因为 AppDomain 特定的资源不由它管理。建议使用新的 AppDomain 来卸载程序集并释放其关联资源。
以上是如何高效卸载使用Assembly.LoadFrom()加载的程序集?的详细内容。更多信息请关注PHP中文网其他相关文章!