通过ClickOnce分发的我们的应用平均需要耗时10.8秒来启动。在.exe(ClickOnce将其安装到的目录中)上运行ngen
后,它平均在 6.4秒中启动。显然,这是一个巨大的加速( 40%),如果可能,我想利用ngen-ification。
罗恩对Is it possible to use NGen with ClickOnce deployment?的回答显示了如何在客户的计算机上完成该操作,假设我猜他正在运行Windows XP,因为它希望我的Windows 7操作系统具有管理员权限,因此这似乎不是通用解决方案。
此外,ngen在我的机器上花费 40秒钟来编译属于该应用程序的所有程序集。
因此,理想情况下,我想在构建过程的过程中为所有(主要)体系结构在应用程序ngt_strong之前预生成ngen,以便可以将其交付给客户,而无需用户接受“可以以管理员身份执行? ”弹出,然后等待40秒钟。
那可能吗?
最佳答案
如果没有Windows 7上的管理访问权限,则无法执行此操作。
问题不在于本地镜像的实际ngen生成,而是安装到需要管理权限的本地镜像缓存(C:\windows\assembly\nativeImages_v#xxxxxxxxx)中。因此,即使您找到了一种为所有目标体系结构预生成 native 镜像的方法,也将无法将其放入适当的位置,以便运行时考虑使用它们。
您不能只将它们与常规二进制文件并排放置,因为这样就无法正确管理它们-进行某些安全策略更改,应用.net Framework更新或进行其他更改时,您会遇到麻烦是对使本地镜像无效并且需要运行“ngen update”命令的引用程序集进行的。微软目前似乎不支持在ClickOnce部署中使用ngen的用例。
关于clickonce - 是否可以预先生成NGen镜像,以便客户不必这样做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10100248/