什么时候两个.NET进程可以共享DLL内存?

时间:2013-05-23 19:23:22

标签: .net windows dll memory-mapping

我有两个引用同一个类llibrary的ASP.NET网站。目前,我们使用两个类库副本发布该站点。这会浪费内存吗?操作系统是否知道文件的两个副本是相同的,因此可以共享DLL的代码部分的内存?如果我将它复制到GAC或其他共享位置,使得它只是一个物理文件,它会映射更少的总内存吗?

2 个答案:

答案 0 :(得分:3)

这个问题从错误的前提开始,ASP.NET DLL不包含任何代码。只是数据,IL和程序集清单。抖动从IL生成机器代码,该代码进入AppDomain的加载程序堆。进程的私有字节,不共享。

可以获取从IL生成的机器代码的一个副本,您必须运行Ngen.exe。它预编译IL并生成一个本机DLL,一个存储在GAC子目录中的.ni.dll。该代码只能与RAM中的一个副本共享。

答案 1 :(得分:0)

进程和应用程序域必须将其加载到内存中才能正常运行。应用程序域和进程是沙箱。