如何使软件更快

时间:2010-09-28 06:04:17

标签: c#

似乎当我运行我的.net应用程序时,它变得比以前快得多,为什么?

无论如何我的软件在启动时运行得更快?

问候

3 个答案:

答案 0 :(得分:4)

如果它是您系统中运行的第一个.NET应用程序,那么第一次运行它时,必须从物理磁盘加载所有.NET库和CLR。第二次运行时,一切都将在文件系统缓存中,因此它将从内存中加载它。除了文件系统缓存之外,可能还有其他缓存效果,但这是最明显的缓存效果。

您的具体应用也是如此,尽管这可能比框架本身要小得多。

尝试引导它的一个选项是在启动时运行一个小的无操作应用程序(例如,从未实际启动窗口的WinForms应用程序)。当然,这会减慢你的其余启动速度 - 如果计算机长时间没有运行任何.NET应用程序,框架最终会从缓存中弹出。

答案 1 :(得分:2)

第一次运行.NET应用程序时会发生以下情况:
1)将应用程序,运行时和框架从硬盘(速度很慢)加载到内存(速度更快)
2)然后根据需要将您的应用程序和相关库JIT编译为本机代码。此本机代码保留在内存中,运行时基础结构会记录它已编译为本机代码的代码 3)仅在第三步中,该本机代码实际上由处理器执行。

如果您没有关闭计算机并重新运行应用程序。发生以下情况:
1)当运行时遇到已由JIT编译器编译为本机的托管代码时,它不会重新编译它。它只是在内存中执行已经编译的本机 2)只有第一次运行时未编译为本机的JIT代码现在从托管编译为本机...而且仅在需要时才编译。

因此,在您的应用程序的第二次运行中,两件事情变得非常快:
1)装载要么根本不发生,要么远小于第一次装载 2)从托管到本机的编译要么没有发生,要么是最小的

这就是为什么第二次运行应用程序几乎总是比第一次运行更快。

答案 2 :(得分:0)

这几乎可以肯定是因为操作系统已经加载了所需的DLL,这些DLL会在应用程序退出后保留在内存中(除非其他地方需要内存)。

你可以在一个只加载和退出的特殊模式下运行你的程序,这样这些DLL就会加载,这是一些应用程序使用的技巧(MS Office和OpenOffice.org是两个让人想起的东西)

有些人会在启动时运行他们的程序,使他们的第一次调用看起来更快,但我认为这应留给用户。毕竟它是他们的机器。通过各种方式向他们展示他们如何做到这一点(例如,将yourprogram.exe /loadandexit添加到您的启动文件夹中),但将其留给他们。

我,我不希望我运行的每个应用程序都会减慢启动时间。