使.NET可执行文件在第一次加载速度更快

Nun*_*uno 4 .net c# performance

我在C#中创建了一个简单的Windows Forms可执行文件(简单来说,我的意思是它有大约20个方法,但它只是一个窗口),目标是.NET Framework 2.0.加载应用程序时,除了InitializeComponent();构造函数中的默认值之外,它不会执行任何操作.

我第一次打开时,应用程序大约需要7秒钟才能在我的Windows 8中加载.然后在我打开它的下一次不到一秒钟.

在我试过的Windows XP 中,第一次加载大约需要30秒.在测试应用程序时,我的一些朋友也抱怨说第一次加载需要花费很多时间(大约30秒).然后它需要更快(1或2秒).

我认为这可能是因为.NET Framework尚未加载,因此在其计算机中加载需要一些时间.

您是否遇到过.NET应用程序的相同问题?
你有任何线索为什么会发生这种情况,我该如何解决这个问题?

编辑 - 我看到有人建议NGEN.但是,如果需要在每台将使用该应用程序的计算机上完成此操作,则无法解决此问题.我想将我的应用程序发布给大众"普通用户",如果我要求他们做一些额外的东西来使用我的应用程序,这是没有意义的.我们需要.NET Framework已经足够糟糕了.我的应用程序应该只是一个没有任何依赖关系的独立EXE(框架除外).

谢谢.

Llo*_*oyd 6

您可以尝试使用NGEN预生成本机映像,.NET将在您的应用程序加载时使用.

您可以在此处找到更多信息 - http://msdn.microsoft.com/en-GB/library/6t9t5wcf(v=vs.80).aspx

这些是平台相关的,通常不可转移,因此您需要在部署的每台计算机上执行此操作.


Ric*_*lly 5

这很可能是由CIL的即时编译引起的.您可以使用NGen编译正在运行的环境的代码.但是,如果沿着这条路走下去,你很可能会失去.Net的平台无关性.

这篇关于MSDN的博客文章详细解释了NGen的性能优势,我建议给它一个阅读.

更新以下评论

正如Lloyd在他的回答中指出的那样,如果您为用户提供安装程序,则可以在此时针对安装应用程序的环境运行NGen.

但是,如果NGen不是一个选项,那么我建议在附加一个分析器的情况下启动你的应用程序.它可以突出显示代码中的任何性能瓶颈.如果您有任何单件或昂贵的静态初始化器,这些将突出显示,并为您提供重构它们的机会.

有许多伟大的.Net剖析器(详情请参阅这个问题),我个人建议看看dotTrace - 他们还提供一个月的免费试用期,这可能是您申请所需的全部.