當我拿一些.net程序集並在機器上運行=> JIT將代碼轉換爲本機並運行它。 如果我將停止應用程序並再次運行,它將(再次)加載到JIT中,JIT將再次將其轉換並再次運行。爲什麼第一次運行.net代碼=>它會比第二次慢呢?
那麼爲什麼第二次運行的應用程序會更優化和更好? JIT是否保存了第一個本地代碼,然後不需要再次將代碼從IL轉換爲本地代碼?如果它的'是',那麼轉換的代碼(本機)保存在哪裏?
當我拿一些.net程序集並在機器上運行=> JIT將代碼轉換爲本機並運行它。 如果我將停止應用程序並再次運行,它將(再次)加載到JIT中,JIT將再次將其轉換並再次運行。爲什麼第一次運行.net代碼=>它會比第二次慢呢?
那麼爲什麼第二次運行的應用程序會更優化和更好? JIT是否保存了第一個本地代碼,然後不需要再次將代碼從IL轉換爲本地代碼?如果它的'是',那麼轉換的代碼(本機)保存在哪裏?
它可能在內存中。第二次你做任何事情都會更快,因爲你所做的任何事情都會通過系統緩存在不同的地方(通過你的光盤,操作系統......)。
當我說「它」時,我的意思是使您的.NET應用程序運行所需的全部文件和庫鏈。
,如果我清理緩存(假設緩存是RAM)?本機的代碼被清理了......並且它仍然假設第二次運行fester – Yanshof 2012-02-25 13:12:58
當我說緩存時,我的意思是說這是一個非常廣泛的意義。你的磁盤控制器將會緩存這些文件,以便它不會從磁盤載入,操作系統會緩存這些文件,所以它不需要去磁盤等等。你無法有效地清理所有的文件將緩存的緩存。 – 2012-02-25 13:14:14
在計算機上,您可以做的事情非常少,*不會第二次更快。 – 2012-02-25 13:15:19
您必須考慮.net需要加載的所有庫,以運行您的應用程序,而不僅僅是您編寫的代碼。所以,一旦它們被加載到內存中,速度會更快。 – ChandlerPelhams 2012-02-25 13:11:36
可能的重複:http://stackoverflow.com/questions/3295622/is-the-net-jit-compiled-code-cached-where – Andreas 2012-02-25 13:19:43
簡單的磁盤緩存可能會解釋很多... – 2012-02-25 13:20:01