2012-07-10 38 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应用程序中异常终止。