Forcingthe.NETJITCompilertoGenerateOptimizedCodeDuringApplicationStartup我在不同的机器上做了很长时间的分析,我注意到了一些“奇怪”的东西。在我的家用机器上,播放循环的第一次运行大约占用可用时间的50%-60%,(我假设这是由于JIT的工作),然后对于后续循环,它稳定地下降到5%的消耗.问题是,如果我在速度较慢的计算机上运行该应用程序,第一次运行所花的时间会比可用时间长,从而中断播放并弄乱输出音频,这是不可接受的。之后,它下降到消费的8%-10%。即使在第一次运行之后,应用程序仍会不时调用一些耗时的例程(大约每2秒一次),这会导致稳定的5%消耗,然后是非常短的20%-25%峰值。我注意到,如果我让应用程序运行一段时间,这些峰值也会下降到7%-10%。(我不确定这是否是由于JIT重新编译了这些代码部分)。所以,我对JIT有一个严重的问题。虽然应用程序即使在非常慢的机器上也能正常运行,但这些“编译风暴”将成为一个大问题。我试图弄清楚如何解决这个问题,我想到了用一个属性标记所有“合理”例程的想法,该属性告诉应用程序在启动时预压缩它们,以便在实际需要时将它们全面优化。但这只是一个想法(我也不太喜欢),我想知道是否有更好的解决方案来解决整个问题。我想听听你的想法。(NGEN应用程序不是一个选项,我喜欢并希望我能获得所有JIT优化。)编辑:内存消耗和垃圾收集没问题,我正在使用对象池,播放期间最大内存峰值为304Kb。您可以使用PrepareMethod...方法触发JIT编译器在应用程序初始化例程期间编译整个程序集程序集(不使用NGen)。此处更详细地描述了此解决方案:ForceJITcompilationatruntime。初始速度确实听起来像是Fusion+JIT,ILMerge(用于Fusion)和NGEN(用于JIT)可以提供帮助;您始终可以在启动时通过系统播放无声曲目,这样用户就不会注意到任何失真做所有的努力吗?NGEN是一个不错的选择;你有什么理由不能使用它吗?您在初始加载后提到的问题听起来不像是JIT相关的。也许垃圾收集。你试过解剖吗?CPU和内存(集合)?正如Marc所说,持续的峰值听起来不像是JIT问题。其他需要注意的事项:编辑:即使您不想使用NGen,也至少要比较一个NGen版本,这样您才能看到JITing的差异如果您认为自己受到JIT的影响,则使用NGEN预编译您的应用程序并运行再次测试。NGEN编译的代码中没有JIT开销。如果您在使用NGEN的应用程序中仍然看到峰值,那么您就知道它们不是由JIT引起的。以上是C#学习教程:强制.NETJIT编译器在应用程序启动时生成优化代码。分享的全部内容,如果对大家有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络收藏,不代表立场,如涉及侵权,敬请谅解点击右侧联系管理员删除。如需转载请注明出处:
