.NET 使用的 JTI 编译进程一直在平衡两个相互冲突的目标 -- 更快的应用程序启动时间和更快的应用程序稳态性能. 从终端用户的角度来看, 如果 JIT 在启动时暂停并计算最佳的稳态性能, 那么就会对应用程序启动速度的感受产生负面的影响. 另一方面, 如果 JIT 优先考虑更快的应用程序启动时间, 那么应用程序的稳态性能就是次优的.
为了解决这一冲突, 来自微软的 Noah Falk 宣布 https://blogs.msdn.microsoft.com/dotnet/2018/08/02/tiered-compilation-preview-in-net-core-2-1/ 了面向. NET Core 2.1 的分层编译. 该特性使 JIT 执行多次编译, 生成可以在运行时热交换的代码, 从而获得最佳的整体性能. 最终结果是应用程序启动快, 同时又具有很棒的稳态性能.
由于该特性尚处于预览阶段, 所以该特性还不是默认启用的, 但是, 对于任何. NET Core 应用程序, 都有几种方式可以激活. 对于你能编译的应用程序, 只需要向项目的默认属性组增加 MSBuild 属性
- <TieredCompilation>true</TieredCompilation>
- .
如果你在运行一个之前编译好的应用程序, 你没有源代码, 那么你可以在 configProperties 部分的 runtimeconfig.json 文件中设置一个新属性:
- System.Runtime.TieredCompilation=true
- .
最后, 可以使用环境变量
COMPlus_TieredCompilation=1
启用分层编译, 而不必修改任何文件.
需要注意的是, 目前, 该特性仍然仅限于. NET Core, 不能指定用于. NET Framework 部署. 想要试用这项新技术的开发人员还可以查看微软在 GitHub 上建立的 https://github.com/aspnet/JitBench/blob/tiered_compilation_demo/README.md 项目比较结果.
来源: http://www.tuicool.com/articles/RbQVj2U