如何防止NGEN重新调整代码(对性能产生负面影响)?

时间:2010-08-28 17:22:36

标签: .net asp.net optimization rebase ngen

我只是想加快我的基于.NET的客户端应用程序,并考虑使用NGEN代码。

Jeffery Richter wrote this警告有关ngening代码:

  

•劣质的加载时性能   (衍合)。当Windows加载时   NGend文件,它检查是否   文件加载在其首选基础上   地址。如果文件不能加载它   首选基地址,然后是Windows   重新定位文件,修复所有   内存地址引用。这是   非常耗时,因为   Windows必须将整个文件加载到   内存并修改其中的各种字节   文件。有关的更多信息   重新定位请看我的书:   Microsoft的编程应用程序   Windows,第4版(微软   出版社)。

由于我对这个主题了解不多,在开始更改项目中的设置之前我应该​​知道什么,以及我应该更改哪些设置?

3 个答案:

答案 0 :(得分:2)

重定位DLL仅在加载时发生,一旦加载,由于重定位过程没有进一步的性能命中。当然,根据DLL的数量和大小(重定位的数量),加载时间会受到很大影响,这是一个问题,因为您的应用程序经常启动和停止。

重新建立DLL以改善加载时间需要持续监视和调整,如果你没有在DLL加载位置之间留下足够的空间,随着DLL的增长或新的DLL被添加到项目中,最终会发生冲突。

这是一篇MSDN文章讨论了改善应用程序启动时间的方法。 http://msdn.microsoft.com/en-us/magazine/cc163655.aspx

答案 1 :(得分:2)

根据this Microsoft blog,“可能存在一些边缘情况,即在Vista +操作系统中设置基址有一个好处,但这些可以在很大程度上被忽略。”因此,虽然使用ngen 可以缩短启动时间,但除非您支持Vista之前的操作系统,否则不再需要设置基本地址。这是新的地址空间布局随机化安全功能的副作用。

答案 2 :(得分:1)

NGEN允许您指定基地址(也在VS设置中公开)。如果您要使用NGEN,您基本上希望确保DLL之间没有任何重叠。如果你有重叠,那么CLR将被强制在加载时重新绑定它们。