问题描述
如何界定这个第一次。比如:一个c/s架构的程序,我机器重启,运行该程序是第一次?还是我程序退出后。再次打开,这每次运行都算第一次?还有,程序中许多功能菜单,对于每个菜单,是不是也存在这个问题呢?比如:此次运行该程序,可能我已经操作A功能好多次了,但B还没有,这时要操作B,是不是也属于第一次呢?也就是,会比刚才的体会明显慢一点。
解决方案
解决方案二:
编译后第一次运行比较慢退出再打开不是这个第一次运行
解决方案三:
这个第一次是指的第一次编译把
解决方案四:
要知道.net的編譯原理:一個程序在編譯之後並不是機器語言而是.netCIL,要等到運行的時候,.net再進行一次編譯將CIL轉為本機可以執行的機器語言(經過優化的),因此這個需要一個過程,也就是所謂的“第一次執行比較慢”。等到退出這個程序,再打開,因為CLR仍然儲存了相關的類庫,所以執行效率會快很多。明白上這個道理的話,相信樓主知道怎么區分了。此次运行该程序,可能我已经操作A功能好多次了,但B还没有,这时要操作B,是不是也属于第一次呢-------------------------這個問題不是一定的,如果有該操作有加載新的類庫,也算第一次吧,否則就不是
解决方案五:
我正在看的《InsideC#.SecondEdition--MicrosoftPress》里面说:是编译好的.EXE文件具有标准的PE(PortableExecutable)头,并导入一个_CorExeMain函数。在运行的时候装载标准PE头和所有的依赖的DLL,如_CorExeMain函数的DLL(mscoree.dll)。然后系统装载器跳转到PE中的入口点,通过_CorExeMain函数执行PE中的MSIL代码。MSIL代码并不能直接执行,而是通过JIT编译为CPU指令。JIT编译只在程序中的方法被调用时发生。所以我觉得如果是就PE的程序载体来说,“第一次运行慢”就是指调入后执行的绝大部分加载、编译工作的过程,以后再运行、调用的某些方法等,只能算运行中编译,这个过程可能就非常快了,呵呵~