剛剛用C#寫了一個(gè)排序算法,在運(yùn)行中對該算法執(zhí)行了二次,第一次需要1000多微秒,但第二次僅需要10微秒。請問各位大蝦這是為什么?
3 回答

aluckdog
TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊
因?yàn)?.NET 程序從源代碼到機(jī)器代碼會(huì)經(jīng)歷兩個(gè)過程:先從源代碼 到IL 中間代碼:再在程序執(zhí)行的時(shí)候,JIT 會(huì)將中間代碼 編譯成機(jī)器代碼。在代碼第一次執(zhí)行的時(shí)候有上述過程。然后編譯后的機(jī)器代碼會(huì)被緩存起來。所以第一次執(zhí)行的速度會(huì)長一些,而第二次速度就快很多, 因?yàn)椴恍枰購?IL 到機(jī)器碼的編譯過程。

至尊寶的傳說
TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊
第一次會(huì)從IL執(zhí)行,然后是函數(shù)本身
第二執(zhí)行,就直接從函數(shù)本身開始。

POPMUISE
TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊
第一此是邊編譯邊執(zhí)行,第二次以上是直接解釋執(zhí)行,因?yàn)榈谝淮我呀?jīng)編譯了呀,而且這些編譯過的代碼會(huì)在內(nèi)存里存在一段時(shí)間,所以接下來的運(yùn)行會(huì)快一點(diǎn)
- 3 回答
- 0 關(guān)注
- 574 瀏覽
添加回答
舉報(bào)
0/150
提交
取消