如何加快第一次执行.NET应用程序的性能?

Chr*_*org 3 .net performance desktop-application client-server

我们的C#客户端应用程序在首次运行时总是需要更长的时间才能加载.我还没有测试它是否是任何较慢的.NET应用程序的第一次运行,或者每个 .NET应用程序的第一次运行速度较慢,但​​在任何情况下它仍然是一个问题.我们怎样才能消除这种一次性的创业打击?

我最初的想法是,某种服务可以"热身"库.我们需要为每个应用程序或任何.NET应用程序执行此操作吗?服务运行的用户是否会有所作为?也许不是Windows服务,在Windows登录上运行的应用程序可以执行肮脏的工作吗?那么,它是一个.NET服务是否足够,或者我们是否必须运行我们的每个程序以消除惩罚?我们可以传入一个命令行参数来告诉程序立即退出,但这是否足够,或者我们是否需要.NET来加载我们将在应用程序的正常执行期间使用的每个程序集?


Re:有些答案,我们正在部署发布模式的DLL,而减速仅在第一次启动时.我们正在尽可能地延迟类的初始化.

Arj*_*nbu 10

它是JIT(即时编译),可让您在第一次运行.net应用程序时等待.这会在运行代码之前将IL编译为机器代码.这种情况仅在第一次发生的原因是机器代码版本随后被存储在磁盘上并被重用.

你可以使用NGEN.EXE预先jit你的应用程序...

这需要在运行该软件的计算机上完成,因为JIT将对其运行的CPU进行编译和优化.您可以将此作为程序安装的一部分......

  • Paint.NET http://getpaint.net在安装过程中执行此操作.它运作良好. (2认同)

Jon*_*eet 7

其他答案谈到了 JIT 时间,但根据我的经验,另一个非常重要的因素是启动后首次加载 .NET 框架本身所花费的时间。

尝试编写一个绝对简单的程序(尽管最好是至少触及您的实际代码使用的程序集)。编译并重新启动。运行简单的程序,然后(完成后)运行您的真实应用程序 - 看看这与在重新启动后运行真实的应用程序而不运行简单的应用程序相比如何。

  • 答案中已经有一个想法 - 编写一个简单的程序来接触您感兴趣的程序集。它不需要做任何其他事情。使其成为 WinForms 应用程序,但不显示 UI。 (2认同)