我们的应用程序通过ClickOnce分发,平均 10.8秒启动。在.exe上运行ngen
后(在ClickOnce将其安装到的目录中),它平均以 6.4秒启动。这显然是一个巨大的加速( 40%),如果可能的话我想利用ngen-ification。
Ron对Is it possible to use NGen with ClickOnce deployment?的回答显示了如何在客户的计算机上完成,假设我猜他运行 Windows XP ,因为它需要管理员权限我的 Windows 7 框,因此看起来不像是通用解决方案。
此外,ngen在我的盒子上 40秒来编译属于该应用程序的所有程序集。
理想情况下,我希望为所有(主要)架构预先设置我们的应用程序,作为构建过程的一部分,因此可以将其发送给客户,而无需用户接受“可以作为管理员执行吗?”弹出,然后等待40秒。
这可能吗?
答案 0 :(得分:9)
如果没有Windows 7上的管理员权限,则无法执行此操作。
问题不在于本机映像的实际生成,而是安装到需要管理权限的本机映像缓存(C:\ windows \ assembly \ nativeImages_v#xxxxxxxxx)中。因此,即使您找到了为所有目标体系结构预生成本机映像的方法,您也无法将它们放入适当的位置以供运行时考虑使用它们。
您不能将它们与常规二进制文件并排放置,因为它们将无法正常管理 - 当您进行某些安全策略更改时会遇到麻烦,应用.net框架更新或者对引用的程序集进行其他更改,这些程序集使本机映像失效,并且需要运行“ngen update”命令。 Microsoft目前似乎不支持使用ClickOnce部署的ngen用例。