强制激进的JIT优化

6
随着 .net 的成熟,JIT能力已经得到改进,变得极为懒惰。也就是说,如果不需要生成机器代码,则不会生成。总的来说,这是一件好事。
然而,如果我想要预热应用程序,我可能更喜欢采取积极的JIT策略。是否有一种方法可以配置 .net 应用程序,使类的所有方法都可以JIT编译,只因为 - 该类已被构造?
如果是的话,我的最爱对象创建模式可以实例化我的应用程序对象图,我将同时拥有所有JIT准备就绪的内容。那将很好。
这可行吗?

1
你可以看一下.NET Native。据我所知,目前它只适用于Windows Store应用程序,但他们将来会扩展到其他类型。http://msdn.microsoft.com/en-us/library/dn584397(v=vs.110).aspx - Dave Zych
你可以使用ngen,或者通过调用每个方法的RuntimeHelpers.PrepareMethod来手动完成。 - Sriram Sakthivel
“在运行时生成机器码[必要时]”不是JIT编译器的基本部分吗?当然,总有Native Image Generator,但两者之间存在权衡 - Arian Motamedi
Ngen.exe是显而易见的方法,.NET 4.5的多核JIT功能也可以实现。 - Hans Passant
2个回答

2
作为一个附注 - 你可以在部署时使用 NGen.exe 来生成你的dll的本机映像(注意:这不是完美的解决方案 - 请仔细查看文档以了解其缺点)。

0

你的意思是,你想要所有东西都提前编译吗 :-)

他们最终为你做到了 - 在 Build 2014 上宣布

Somasegar 告诉我,开发人员告诉微软,.NET 是一种非常高效的编程语言,但它并不总是能够提供他们所期望的性能。 “我们一直在努力创新,向开发人员展示 .NET 仍然是一个非常适合在这个现代世界中构建应用程序的平台,”他说。通过 .NET 本机提前编译器,微软承诺开发人员将看到更快的启动时间,更低的内存使用率和整体更好的性能。这个新功能目前正在预览阶段,并允许开发人员针对 X64 和 ARM 平台进行定位。

你可以试一下(目前仅限预览,可能仅适用于“通用”应用程序,因此实用性因人而异),更多信息可在MSDN上获得


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接