后台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