当前位置:  开发笔记 > 编程语言 > 正文

你有没有用过ngen.exe?

如何解决《你有没有用过ngen.exe?》经验,为你挑选了4个好方法。

这里有人曾经使用过ngen吗?哪里?为什么?是否有任何性能提升?何时何地使用它有意义?



1> Marc Gravell..:

我不是每天都使用它,但它被想要提高性能的工具使用; 例如,Paint.NET在安装过程中使用NGEN(或者可能是第一次使用).有些MS工具也可以(虽然我不确定).

基本上,NGEN执行大部分JIT以进行组装,因此冷启动几乎没有延迟.当然,在大多数典型的用法中,并没有达到100%的代码,所以在某些方面这会做很多不必要的工作 - 但它无法提前告诉我们.

IMO的缺点是你需要使用GAC来使用NGEN; 我尽量避免使用GAC,这样我就可以使用robocopy-deployment(到服务器)和ClickOnce(到客户端).


您无需使用GAC即可使用NGEN.http://blogs.msdn.com/b/abhinaba/archive/2013/12/11/net-loading-native-ngen-images-and-its-interaction-with-the-gac.aspx

2> Peter Tate..:

是的,我见过性能改进.我的测量表明,如果我也将我的程序集放入GAC,它确实提高了启动性能,因为我的程序集都是强名称.如果你的程序集名称很强,那么在不使用GAC的情况下,NGen不会有任何区别.这样做的原因是,如果您具有不在GAC中的强命名程序集,那么.NET运行时通过从磁盘加载整个托管程序集来验证您的强命名程序集未被篡改,以便它可以验证它是否可以绕过它NGen的主要好处之一.

这对我的应用程序来说不是一个很好的选择,因为我们依赖于我们公司的通用程序集(也是强名称).许多使用许多不同版本的产品使用通用程序集,将它们放在GAC中意味着如果我们的某个应用程序没有说其中一个通用程序集的"使用特定版本",它将加载GAC版本而不管是什么版本在其执行目录中.我们认为NGen的好处并不值得冒险.



3> Vimvq1987..:

Ngen主要减少.NET应用程序和应用程序工作集的启动时间.但它有一些缺点(来自CLR Via C#of Jeffrey Richter):

没有知识产权保护

NGen文件可能会失去同步

劣质负载时间性能(重新绑定/绑定)

劣质执行时间性能

由于刚刚列出的所有问题,在考虑使用NGen.exe时应该非常谨慎.对于服务器端应用程序,NGen.exe几乎没有任何意义,因为只有第一个客户端请求会遇到性能损失; 未来的客户请求高速运行.此外,对于大多数服务器应用程序,只需要一个代码实例,因此没有工作集的好处.

对于客户端应用程序,如果多个应用程序同时使用程序集,则NGen.exe可能有助于缩短启动时间或减少工作集.即使在多个应用程序不使用组件的情况下,NGen的组装也可以改善工作组.此外,如果NGen.exe用于所有客户端应用程序的程序集,则CLR根本不需要加载JIT编译器,从而进一步减少了工作集.当然,如果只有一个程序集不是NGen或者无法使用程序集的NGen文件,那么JIT编译器将加载,并且应用程序的工作集会增加.



4> Mehrdad Afsh..:

ngen主要用于改善启动时间(通过消除JIT编译).它可能会改善(通过减少JIT时间)或降低应用程序的整体性能(因为某些JIT优化将不可用).

.NET Framework本身ngen在安装时用于许多程序集.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有