什么';s多次调用同一程序集.Load(AssemblyName)的缺点

本文关键字:Load 程序集 AssemblyName 缺点 调用 什么 | 更新日期: 2023-09-27 17:58:25

我很想知道用同一版本的程序集多次调用Assembly.Load(AssemblyName)的缺点是什么。运行时是否知道在第一次调用后不要再次加载程序集?如果没有,有什么方法可以检测已经加载的内容吗?

提前谢谢。

什么';s多次调用同一程序集.Load(AssemblyName)的缺点

使用此重载时,它将只在内存中加载一次。您可以使用Process Explorer进行验证。查看加载的模块列表。每个程序集都使用LoadLibrary加载到.NET 3.5。此外,它作为内存映射文件加载到进程中。

从.NET 4.0开始,程序集仅作为内存映射文件加载,不再通过LoadLibrary加载,除非它是预编译的ngenned程序集。

NET 4中的这一突破性变化是因为MS在VS 2010的开发过程中发现,他们的内存确实消耗得相当快。有人发现,每个加载的程序集在虚拟内存中占用了其原始大小的两倍,因为它通过LoadLibrary加载了一次,第二次作为内存映射文件加载。这并不容易找到,除非您使用VMMap查看您的流程。由于VS中有大量的代码,这是VS2010的一个主要问题,而VS2010现在主要是由管理的。