使用相同的程序集多次调用Assembly.Load(AssemblyName)有什么缺点?

时间:2011-06-03 19:43:20

标签: c# .net reflection load

我很想知道使用相同版本的程序集多次调用Assembly.Load(AssemblyName)有什么缺点。第一次调用后运行时是否知道不再加载程序集?如果没有,有没有办法检测已经装载的东西?

提前致谢。

1 个答案:

答案 0 :(得分:10)

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

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

.NET 4的这一重大改变是因为MS在VS 2010的开发过程中发现他们的内存确实耗尽了很多。有人发现每个加载的程序集在虚拟内存中的原始大小是原始大小的两倍,因为它通过LoadLibrary加载一次,第二次作为内存映射文件加载。除非您将VMMap用于流程,否则这不容易找到。由于VS中存在大量代码,这对VS2010来说是一个主要问题,现在主要是管理。