使用NGEN时计算工作空间节省

时间:2013-12-09 23:20:19

标签: .net memory citrix terminal-services ngen

我目前正在尝试计算在Citrix服务器场上运行时,NGEN在节省内存方面是否对我们的.NET客户端有任何好处。

我的主要参考文献是以下文章:

本文建议使用VMMap,我只需要检查一下我的可共享WS是否会增加,而且我是金色的。

事实上,我确实看到可共享WS增加了大约56MB(参考之前和之后的图片)。但我也注意到,总的WS也有所增加。也许是由于NGEN图像尺寸的增加?

所以我认为我需要考虑到这一点,而实际上我的情况会差一些。

但后来我也明白,由于JIT没有发生,我在那里节省了一些空间。我认为JIT将出现在私人数据下。

我计算如下:   - [ΔImageShareableWS] +([ΔImagePrivateWS] - [ΔPrivateDataTotal WS])

使用下图:

  • 56.3 +(-58.3 - -6.8)=节省4.8MB(每个后续流程)

所以我想问题是 - 我做得对吗?我有什么遗漏或没有考虑到这里吗?

在NGEN之前

Before NGEN

NGEN之后

After NGEN

1 个答案:

答案 0 :(得分:1)

我不同意你的假设,因为总的WS从212上升到263,你的情况更糟。原因是你的总数增加的大部分来自可分享区块,你只支付该可共享块的内存开销一次。

因此,这实际上取决于您运行的应用程序的会话/实例数量,因为56MB在所有会话之间实际共享。

所以权衡如下:

从私人WS = 86.3 - 81.9 = 4.4MB(= S)

保存每个会话

每次会话从Shareable = 56 / num sessions(= I)增加

所以你想要的是S> I.显然,对于较低的会话数,你会更糟糕,而且对于高会话数,你会更好。所以要找到你的等价点:

4.4 = 56 / num sessions

给予:Num sessions = 13

因此,平均而言,如果您在服务器上运行的应用程序实例超过13个,那么您最好使用NGEN。