我有两个引用同一个类llibrary的ASP.NET网站。目前,我们使用两个类库副本发布该站点。这会浪费内存吗?操作系统是否知道文件的两个副本是相同的,因此可以共享DLL的代码部分的内存?如果我将它复制到GAC或其他共享位置,使得它只是一个物理文件,它会映射更少的总内存吗?
答案 0 :(得分:3)
这个问题从错误的前提开始,ASP.NET DLL不包含任何代码。只是数据,IL和程序集清单。抖动从IL生成机器代码,该代码进入AppDomain的加载程序堆。进程的私有字节,不共享。
可以获取从IL生成的机器代码的一个副本,您必须运行Ngen.exe。它预编译IL并生成一个本机DLL,一个存储在GAC子目录中的.ni.dll。该代码只能与RAM中的一个副本共享。
答案 1 :(得分:0)
进程和应用程序域必须将其加载到内存中才能正常运行。应用程序域和进程是沙箱。