3 回答
TA贡献2037条经验 获得超6个赞
不幸的是,一旦装配被加载,您将无法卸载装配。但是您可以卸载AppDomain。您可以做的是创建一个新的AppDomain(AppDomain.CreateDomain(...)),将程序集加载到此appdomain中以进行处理,然后在需要时卸载AppDomain。卸载AppDomain时,将卸载所有已加载的程序集。(请参阅参考资料)
要调用垃圾收集器,您可以使用
GC.Collect(); // collects all unused memory
GC.WaitForPendingFinalizers(); // wait until GC has finished its work
GC.Collect();
GC在后台线程中调用终结器,这就是为什么您必须等待并再次调用Collect()以确保删除了所有内容的原因。
TA贡献1816条经验 获得超4个赞
而不是使用LoadFrom()或LoadFile()可以使用Load与File.ReadAllBytes()。这样,它将不使用汇编文件,而是将其读取并使用读取的数据。
您的代码将如下所示
Assembly assem = Assembly.Load(File.ReadAllBytes(filePath));
sw = Stopwatch.StartNew();
var types1 = assem.GetTypes();
sw.Stop();
double time1 = sw.Elapsed.TotalMilliseconds;
从这里开始,除非文件包含的所有域都被卸载,否则我们无法卸载文件。
- 3 回答
- 0 关注
- 964 浏览
添加回答
举报