ProfileOptimization实际上有效吗?

lep*_*pie 18 jit multicore .net-4.5

.NET 4.5的新性能增强之一是引入了"MultiCode JIT".

有关详细信息,请参见此处

我试过这个,但似乎对我的申请没有影响.

我感兴趣的原因是我的应用程序(IronScheme)需要很长时间才能启动,如果不是NGEN,这意味着启动时会涉及相当数量的JIT'ng.(NGEN时为1.4秒vs 0.1秒).

我已经按照如何启用它的说明进行操作,我可以看到创建了一个"小"(4-12KB).但是在随后的启动中,似乎对改善启动时间没有任何影响.它仍然是1.4秒.

有没有人在实践中看到(或制作过)这项工作?

此外,对哪些代码进行"跟踪"有任何限制吗?例如:集加载上下文,瞬态组件等我问这个作为创建的文件似乎永远不会长大,但我其实生成的代码中有相当(在瞬态组装).

我遇到的一个错误是,SetProfileRoot似乎不理解/作为路径分隔符,请确保使用\.

Dan*_*lor 21

我们在微软使用的经验法则是,Multicore JIT可以让你在NGEN启动性能的一半.因此,如果您的应用程序使用NGEN在0.1秒内启动而在没有NGEN的情况下启动1.4秒,我们预计多核JIT启动大约需要0.75秒.

话虽这么说,我们必须设置一些限制来保证程序执行顺序是否与MCJ相同.MCJ有时会暂停后台线程等待由前台线程加载模块,并且将中止背景编译,如果有一个组件解决或模块解决事件.

如果您想了解发生了什么,你的情况,我们有MCJ功能的ETW(Windows事件跟踪)的仪器,我们将很快发布一个版本的PerfView的,这将能够收集到这些事件,如果你把一个跟踪您的应用启动.

更新: PerfView已更新,可以显示后台JIT信息.以下是使用最新版本(1.2.2.0)进行诊断的步骤:

  1. 使用应用程序启动的PerfView收集跟踪,使用Collect-> Run或Collect->从主PerfView菜单收集.
  2. 假设你使用Collect->运行,把你的.exe文件的名称在命令文本框中,选择一个文件名(即IronScheme.etl),选择背景JIT从高级选项,然后单击运行命令.
  3. 关闭您的应用程序,然后双击生成的IronScheme.etl文件.
  4. 在列表IronScheme.etl下的JIT统计视图双击,你会看到这样的事情,在弹出的观点:
This process uses Background JIT compilation (System.Runtime.ProfileOptimize) 
    Methods Background JITTed : 2,951 
    Percent # Methods Background JITTed : 52.9% 
    MSec Background JITTing : 3,901 
    Percent Time JITTing is Background : 50.9% 
    Background JIT Thread : 11308 
Run Code Online (Sandbox Code Playgroud)

您可以单击"查看原始背景Jit诊断"以查看Excel中的所有MCJ事件.我忘了问一个问题:你是在多核机器还是多核VM上运行它?在仅具有单个逻辑处理器的VM中测试MCJ是一个常见错误.


小智 10

Activator.CreateInstance在启动期间打电话似乎杀了MCJ?

或者更确切地说,触发了大会决议,这似乎完全阻止了MCJ.之后永远不会工作.也许MSDN文档应该提到这一点.