用CoreRT /其他AOT编译.net core应用

本文关键字:net core 应用 编译 AOT CoreRT 其他 | 更新日期: 2023-09-27 18:13:23

我正在ASP上构建一个REST API。Net core 1.0。在生产环境中,不使用JIT是非常有用的,因为应用程序的docker容器会伸缩,在CI过程中会一次又一次地重新部署,所以每个部署容器的及时编译会导致严重的滞后,LB健康检查死亡和其他痛苦。

正如我所读到的,使用dotnet CLI的本地编译已经停止了。我试着用CoreRT构建,但运气不好(由于复杂性,细节随需而定)。

由于这个问题相当抽象,我不提供示例代码或详细信息,所以一开始就有几个问题代替:

  1. 我的假设是正确的——提前编译会解决每个路径首次执行缓慢的问题吗?或者——没有其他解决方案吗?
  2. 如果是真的,目前有可能从。net核心构建"本地"应用程序(ubuntu x64目标)吗?
  3. 如果是,什么是最佳实践-我怎么做?有人有这方面的经验吗?

(目标平台将是ubuntu-14.04-x64 docker镜像以及编译平台。对于开发目的,在OSX上编译它也会很好。)

提前感谢。

用CoreRT /其他AOT编译.net core应用

目前不可能进行完全的本机提前编译。这是上面链接的CoreRT项目的目标之一,但还没有达到我称之为生产就绪的任何状态。去年Connect的演示应该持保留态度。例如,它们仍然没有反射子系统。但是,我们有几个解决方案可以大大减少在JIT时需要生成的代码量。对于。net Core,这个工具被称为CrossGen,它最近相当成熟。

当我引起你的注意时,我还会提到我们正在努力改进NGEN/CrossGen格式,以减轻典型ni文件所涉及的一大部分典型痛苦。命名为ReadyToRun

希望有帮助。如果你有其他问题,请告诉我。

披露:我在UWP (CoreRT和LLILC等的姊妹项目)的。net本机运行时和编译器团队工作

在https://github.com/dotnet/coreclr/blob/master/Documentation/building/crossgen.md有一个使用CrossGen的指南。有点过时了,我看看什么时候能不能更新一下。使用CrossGen最重要的部分是在命令行上指定-Platform_Assemblies_Paths开关,告诉CrossGen它需要的所有依赖项的位置(例如,System.Private.CoreLib.dll)。

希望有帮助。如果您遇到任何问题,请告诉我。