2012-07-10 36 views
0

我想利用.net 4.5中新的多核jitting功能。Asp.net 4.5「multi-core jitting」不起作用

  • 我的web.config文件設置爲targetFramework =「4.5」
  • 在IIS應用程序池框架設置爲V4.0(從我的理解,這是正確的)
  • 我的處理器是一個與4芯(或8超線程)17 - http://ark.intel.com/products/52214/

但它似乎並不都有所下降JIT編譯時間(基於性能分析),我可以看到沒有任何證據* .prof文件在ASP.NET臨時文件中創建。

我如何找出原因?

+0

您能否請求提出連接問題並讓我知道問題ID?http://connect.microsoft.com/VisualStudio – Anand 2012-11-13 01:08:12

+0

完成 - https://connect.microsoft.com/VisualStudio/feedback/details/770871/ asp-net-4-5-multi-core-jitting-not-working – 2012-11-13 10:10:49

+0

謝謝。來自微軟的Sebastian回覆了這篇文章。稍後我會通過KB文章鏈接更新連接錯誤。 – Anand 2012-11-13 21:19:56

回答

3

後臺JIT編譯在某些特定場景下可能不起作用。您可以使用PerfView http://www.microsoft.com/en-us/download/details.aspx?id=28567

從文檔調試它,這裏是主要的原因:

  1. 當模塊被加載,模塊構造可稱爲,這可能有副作用(即使這非常罕見)。因此,如果JITTing的背景會導致模塊比其他模塊更早加載,它可能會暴露(罕見)錯誤。由於後臺JIT具有非常高的兼容性,因此可以通過使用JIT編譯時加載的EXACT模塊對每個方法進行分類來防止這種情況,並且只有在所有這些EXACT模塊都加載後才允許它們進行後臺JIT編譯當前運行。因此,如果你有一個場景(比如菜單打開),有時會加載更多或更少的模塊(因爲之前的用戶操作導致加載不同的模塊),那麼背景JIT可能無法正常工作。

  2. 如果附加了System.Assembly.ModuleResolve事件的回調函數,那麼如果ModuleResolve回調函數在第二次運行時返回不同的答案,那麼後臺JITing可能會產生副作用是可能的(儘管極不可能,也是非常糟糕的設計)比第一次運行時要少。由於此背景JIT編譯在第一次被調用時被暫停了一個ModuleResolve回調。

  3. 因爲任何模塊查找失敗,在最終失敗之前將調用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應用程序中異常終止。