我们的应用程序有很多 .NET 程序集,到目前为止,还没有使用 NGen 脚本部署这些程序集,因此它们总是在运行时进行 JIT 处理。
由于我们的应用程序通常部署到终端服务器,让 Windows 共享代码的二进制图像可能比当前的方式更优化,所以我正在研究设置基地址和 NGen'ning 程序集。
所以我在没有任何 NGen 的情况下运行该程序,并使用 [来自 SysInternals 的 listdlls][1] 来查找每个的大小,然后我将其增加到下一类大小(即 xxxx --> 10000)。然后我为我们所有的程序集列出了一个内存列表,并调整了它们的基地址。
到目前为止一切顺利,listdlls
我现在可以看到我们的程序集都没有在运行时重新设置基础。
但是,如何测量两个实例之间实际共享的内存量?基本上,假设我在未对程序集执行 NGEN 的情况下启动程序的两个实例,然后在执行 NGEN 后再次执行。
我应该查看什么样的数字,从哪个工具中找到实际效果(如果有的话)?
例如,我知道重新定位我们的程序集的行为可能会移动我们使用的第 3 方程序集(例如 DevExpress 组件),因此它们突然必须重新定位,然后整个事情就是洗牌。
那么,我从哪里读取哪些数字?比如,我是否使用任务管理器的工作集?私人记忆?提交大小?之前和之后的空闲内存?
有什么建议吗?