我只是想加快我的基于.NET的客户端应用程序,并考虑使用NGEN代码。
Jeffery Richter wrote this警告有关ngening代码:
•劣质的加载时性能 (衍合)。当Windows加载时 NGend文件,它检查是否 文件加载在其首选基础上 地址。如果文件不能加载它 首选基地址,然后是Windows 重新定位文件,修复所有 内存地址引用。这是 非常耗时,因为 Windows必须将整个文件加载到 内存并修改其中的各种字节 文件。有关的更多信息 重新定位请看我的书: Microsoft的编程应用程序 Windows,第4版(微软 出版社)。
由于我对这个主题了解不多,在开始更改项目中的设置之前我应该知道什么,以及我应该更改哪些设置?
答案 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将被强制在加载时重新绑定它们。