.NET 4.5的新性能增强之一是引入了“MultiCode JIT”。
有关详细信息,请参阅here。
我试过这个,但似乎对我的申请没有影响。
我感兴趣的原因是我的应用程序(IronScheme)需要很长时间才能启动,如果不是NGEN,这意味着启动时会涉及相当数量的JIT'ng。 (NGEN时为1.4秒vs 0.1秒)。
我已经按照如何启用它的说明进行操作,我可以看到创建了一个“小”(4-12KB)。但是在随后的启动中,似乎对改善启动时间没有任何影响。它仍然是1.4秒。
有没有人在实践中看到(或制作过)这项工作?
此外,对哪些代码进行“跟踪”有任何限制吗?例如:程序集加载上下文,瞬态程序集等。我问这个,因为创建的文件似乎永远不会增长,但实际上我生成了相当数量的代码(在瞬态汇编中)。
我遇到的一个错误是SetProfileRoot
似乎不理解/作为路径分隔符,请确保使用\。
答案 0 :(得分:21)
我们在微软使用的经验法则是,Multicore JIT可以帮助您实现NGEN启动性能的一半。因此,如果您的应用程序使用NGEN在0.1秒内启动,而在没有NGEN的情况下启动1.4秒,我们预计多核JIT启动需要大约0.75秒。
话虽这么说,我们必须设置一些限制来保证程序执行顺序是否与MCJ相同。 MCJ有时会暂停后台线程,等待前台线程加载模块,如果有程序集解析或模块解析事件,将中止后台编译。
如果你想知道你的情况发生了什么,我们有ETW(Windows事件追踪)仪器的MCJ功能,我们将很快发布一个版本的PerfView,如果你能够收集这些事件记下你的app启动。
更新:PerfView已更新,可以显示后台JIT信息。以下是使用最新版本(1.2.2.0)进行诊断的步骤:
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
您可以单击“查看原始背景Jit诊断”以查看Excel中的所有MCJ事件。我忘了问一个问题:你是在多核机器还是多核VM上运行它?在仅具有单个逻辑处理器的VM中测试MCJ是一个常见的错误。
答案 1 :(得分:10)
在启动期间调用Activator.CreateInstance
似乎会杀死MCJ?
或者更确切地说,触发了大会决议,这似乎完全阻止了MCJ。之后永远不会工作。也许MSDN文档应该提到这一点。