之前我没有使用NGen,但现在我需要提高WPF应用程序的启动性能。据我所知,常见的情况是在应用程序安装期间运行ngen。但我的应用程序用于公司内部需求,并且没有安装程序(这会使事情变得复杂)。
还有其他方法可以运行ngen吗?如果我是第一次启动应用程序时怎么办?我需要管理员权限吗?
答案 0 :(得分:2)
根据MSDN(备注下的第一行),您需要管理权限才能运行ngen。将您的应用程序打包到一个简单的MSI中可能会更容易,因为我认为您不能从应用程序内部提升您的权限以运行ngen。您必须更改清单文件,这会导致您的应用每次启动时都需要管理权限。
答案 1 :(得分:1)
如果您的应用面向.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,如上面的答案中所述。