1

我只是想加快基于 .NET 的客户端应用程序的速度,并正在考虑对代码进行 NGEN 处理。

Jeffery Richter写了这个关于 ngening 代码的警告:

• 较差的加载时间性能(变基)。当 Windows 加载一个 NGend 文件时,它会检查文件是否在其首选基地址加载。如果文件无法在其首选基地址加载,则 Windows 会重新定位文件,修复所有内存地址引用。这是非常耗时的,因为 Windows 必须将整个文件加载到内存中并修改文件中的各个字节。有关变基的更多信息,请参阅我的书:Programming Applications for Microsoft Windows, 4th Edition (Microsoft Press)。

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

4

3 回答 3

2

DLL 的重定位只发生在加载时,一旦加载,就不会因为重定位过程而进一步影响性能。当然,根据 DLL 的数量和大小(重定位的数量),加载时间可能会受到显着影响,这是一个问题,因为您的应用程序经常启动和停止。

重新定位 DLL 以缩短加载时间需要持续监控和调整,如果您没有在 DLL 加载位置之间留出足够的空间,那么随着 DLL 的增长或新的 DLL 被添加到项目中,您最终会发生冲突。

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

于 2010-08-29T07:16:45.803 回答
2

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

于 2012-04-11T02:32:48.280 回答
1

NGEN 允许您指定基地址(也在 VS 设置中公开)。如果您打算使用 NGEN,则基本上要确保 DLL 之间没有任何重叠。如果您有重叠,则 CLR 将在加载时强制对其进行变基。

于 2010-08-28T17:44:36.080 回答