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