9

我们的应用程序通过 ClickOnce 分发,平均需要10.8 秒才能启动。在ngen.exe(在 ClickOnce 安装到的目录中)上运行后,它平均在6.4 秒内启动。这显然是一个巨大的加速(40%),如果可能的话,我想使用 ngen-ification。

Ron 对Is it possible to use NGen with ClickOnce deployment的回答?展示了如何在客户的机器上完成它,假设我猜他运行的是Windows XP,因为它需要我的Windows 7机器上的管理员权限,所以这似乎不是一个通用的解决方案。

此外,在我的机器上,ngen 需要40 秒来编译属于该应用程序的所有程序集。

所以理想情况下,我想为所有(主要)架构预先生成我们的应用程序,作为构建过程的一部分,这样它就可以交付给客户,而无需用户接受“可以以管理员身份执行?” 弹出,然后等待 40 秒。

那可能吗?

4

1 回答 1

9

如果没有 Windows 7 上的管理访问权限,您将无法执行此操作。

问题不在于本机映像的实际 ngen 生成,而是安装到需要管理权限的本机映像缓存 (C:\windows\assembly\nativeImages_v#xxxxxxxxx)。因此,即使您找到了一种为所有目标架构预生成本机映像的方法,您也无法将它们放到运行时考虑使用它们的适当位置。

您不能将它们与常规二进制文件并排放置,因为那样它们将无法正确管理 - 当进行某些安全策略更改、应用 .net 框架更新或其他更改时,您会遇到麻烦被引用的程序集使本机映像无效,并且需要运行“ngen update”命令。微软目前似乎不支持使用 ClickOnce 部署的 ngen 用例。

于 2012-04-11T06:04:03.163 回答