後臺JIT編譯在某些特定場景下可能不起作用。您可以使用PerfView http://www.microsoft.com/en-us/download/details.aspx?id=28567
從文檔調試它,這裏是主要的原因:
當模塊被加載,模塊構造可稱爲,這可能有副作用(即使這非常罕見)。因此,如果JITTing的背景會導致模塊比其他模塊更早加載,它可能會暴露(罕見)錯誤。由於後臺JIT具有非常高的兼容性,因此可以通過使用JIT編譯時加載的EXACT模塊對每個方法進行分類來防止這種情況,並且只有在所有這些EXACT模塊都加載後才允許它們進行後臺JIT編譯當前運行。因此,如果你有一個場景(比如菜單打開),有時會加載更多或更少的模塊(因爲之前的用戶操作導致加載不同的模塊),那麼背景JIT可能無法正常工作。
如果附加了System.Assembly.ModuleResolve事件的回調函數,那麼如果ModuleResolve回調函數在第二次運行時返回不同的答案,那麼後臺JITing可能會產生副作用是可能的(儘管極不可能,也是非常糟糕的設計)比第一次運行時要少。由於此背景JIT編譯在第一次被調用時被暫停了一個ModuleResolve回調。
因爲任何模塊查找失敗,在最終失敗之前將調用ModuleResolve事件,這意味着任何探測失敗的模塊都將禁止後臺JIT編譯。
我會建議檢查組件,其失敗的背景JIT(IES)被暴露的這些問題之一。爲此,請在應用程序啓動之前啓動一個新的集合,並在完成時停止它。不要忘記在高級部分檢查背景JIT選項。
在JITStats部分,你應該得到的東西是這樣的:
Total Number of JIT compiled methods : 10,673
Total MSec JIT compiling : 9,873
This process uses Background JIT compilation (System.Runtime.ProfileOptimize)
WARNING: Background JIT aborted at 11,847.909 Msec
The last assembly before the abort was 'NHibernate.XmlSerializers' loaded unsuccessfully at 11,793.741
Methods Background JITTed : 0
Percent # Methods Background JITTed : 0.0%
更新
相關方案3中,ASP.NET,ASP的情況。NET本身處理ModuleResolve事件,因此任何無法加載的模塊都將導致MCJ在ASP.NET應用程序中異常終止。
您能否請求提出連接問題並讓我知道問題ID?http://connect.microsoft.com/VisualStudio – Anand 2012-11-13 01:08:12
完成 - https://connect.microsoft.com/VisualStudio/feedback/details/770871/ asp-net-4-5-multi-core-jitting-not-working – 2012-11-13 10:10:49
謝謝。來自微軟的Sebastian回覆了這篇文章。稍後我會通過KB文章鏈接更新連接錯誤。 – Anand 2012-11-13 21:19:56