我以前没有使用 NGen,但现在我需要提高我的 WPF 应用程序的启动性能。据我了解,常见情况是在应用程序安装期间运行 ngen 。但是我的应用程序用于满足公司内部需求并且没有安装程序(它只会使事情复杂化)。
还有其他运行ngen的方法吗?如果我在第一次启动应用程序时这样做怎么办?我需要管理员权限吗?
根据MSDN (备注下的第一行),您需要管理权限才能运行 ngen。将您的应用程序打包到一个简单的 MSI 中可能会更容易,因为我认为您不能从应用程序内部提升您的权限来运行 ngen。您必须更改清单文件,这会导致您的应用程序每次启动时都需要管理权限。
如果您的应用程序面向 .NET 4.5 或更高版本并在 Windows 8 或更高版本上运行,那么您可以使用 Auto NGEN。Auto NGEN 是在用户计算机空闲时运行的维护任务。维护任务会自动在“合格”程序集上运行 NGEN。
对于您的方案,您需要将您的应用程序安装到 GAC 中。首次启动应用时,.NET 运行时会生成使用日志并记下您的应用程序集。Auto NGEN 任务只是使用这些日志并为您运行 NGEN。因此,通常您会在维护任务运行完成后获得改进的启动性能。(我认为它通常在凌晨 3 点运行)
有关一些信息,请参阅此链接:http: //eknowledger.wordpress.com/2012/05/04/clr-4-5-net-framework-kernel-improvements/
请注意,就像 NGEN 一样,将程序集安装到 GAC 需要管理员权限。:) 因此,您可能更喜欢创建安装程序并在安装时启用 NGEN,如上述答案中所述。