问题 如何在安装结束时运行nGen(MSI)?


我想在安装结束时执行nGen只是为了提高应用程序首次启动的感知性能。我怎么能这样做?有一些最佳做法吗?我可以确定nGen始终与.NET Framework一起安装吗?

谢谢!


3256
2018-02-06 21:45


起源



答案:


您可以使用自定义安装程序操作来生成程序集。以下链接更详细地解释了这一点:

http://www.dotnetperls.com/ngen

http://www.bobpowell.net/prejit.htm

我还记得对Paint.NET的安装程序(包括.NET Framework引导,预JITting等)的一个很好的讨论,但我现在找不到它。如果我再遇到它,我会编辑这篇文章。


8
2018-05-11 16:49



这两个链接都已不存在了 - Wouter
感谢@Wouter的信息。我已经更新了dotnetperls链接(他们必须已经转移到MVC路由而不是重定向的旧URL)。 bobpowell.net链接似乎仍然没问题 - 你能重试吗? - Dave R.


答案:


您可以使用自定义安装程序操作来生成程序集。以下链接更详细地解释了这一点:

http://www.dotnetperls.com/ngen

http://www.bobpowell.net/prejit.htm

我还记得对Paint.NET的安装程序(包括.NET Framework引导,预JITting等)的一个很好的讨论,但我现在找不到它。如果我再遇到它,我会编辑这篇文章。


8
2018-05-11 16:49



这两个链接都已不存在了 - Wouter
感谢@Wouter的信息。我已经更新了dotnetperls链接(他们必须已经转移到MVC路由而不是重定向的旧URL)。 bobpowell.net链接似乎仍然没问题 - 你能重试吗? - Dave R.


首先,“是”你可以保证,如果他们安装了.Net框架,他们就拥有了Ngen。你唯一需要知道的是他们安装了哪个版本,因为它在1.1和2.0之间有所不同。我过去所做的只是创建了一个脚本,我的安装程序在最后调用它在所有程序集上运行ngen。


1
2018-02-06 21:57





这个 博客文章 应该是有用的。

编辑:既然你没有使用Wix,那么 这个 也可能有用。


1
2018-02-07 21:13



我之前看过这篇博文,但我没有使用WiX。 - Martin


要提高启动时的感知性能,请查看应用程序中的静态。启动应用程序时,许多静态可能会导致大量开销。

另外,考虑在EXE中只使用主表单,在单独的DLL中使用其他所有内容。这不仅可以提高性能,还有助于保证您从数据中分离视图。

最后,如果您在NGENing上设置,请查看有关在MSI中运行自定义操作的帮助。您应该能够设置自定义操作以执行所需操作。


0
2018-02-07 01:34





正如'弥迦'所说, ,你会发现.en Framework安装了NGen。

查看WiX 3.5安装程序示例如何在安装过程中对组件进行NGen处理。

NGen:创建安装项目

我希望这能帮到您。


0
2018-03-17 09:37





发射 ngen.exe

>ngen install c:\myfiles\MyAssembly.exe

0
2017-11-07 02:52