.NET7.0刚发布不久,.NET社区开始了.NET8.0的开发,重心重新回到了新功能的迭代。

我们知道在.NET7.0中一个令人激动的特新就是支持了NativeAOT,我们可以通过NativeAOT生成本机程序,由于无需JIT编译,所以无需安装.NET Runtime,也进一步的提升了.程序的启动速度,降低了程序的体积,在客户端软件开发、ServerLess等场景会有不错的前景。关于NativeAOT发布的详情可以点下方链接:

https://learn.microsoft.com/zh-cn/dotnet/core/deploying/native-aot/

作为地表最强的.NET WEB服务器ASP.NET Core,自然也是支持NativeAOT编译,而今天就是为大家介绍关于.NET8.0中ASP.NET Core中计划的一些NativeAOT改进。

概述

.NET 7引入了对将.NET控制台项目作为本地AOT发布的支持,产生了一个独立的、针对平台的可执行文件,没有任何运行时JIT。本地AOT应用程序启动非常快,而且使用的内存更少。该应用程序可以被部署到没有安装任何.NET运行时的机器或容器中。在.NET 8中,我们将把对本地AOT的支持扩展到ASP.NET Core,首先是以云为重点,用最小的API构建的API应用程序,满足关于发布文件大小、启动时间、工作集和吞吐性能的期望。

范围

如前所述,.NET8.0的主要重点是使用Minimal APIs实现ASP.NET Core API应用程序的本地AOT发布。这里的 "支持本地AOT"是指确保项目能够通过<PublishAOT>项目属性启用本地AOT发布,并且由此产生的开发经验能够引导开发人员制作本地AOT发布的应用程序,而不会出现构建、发布或运行时警告和错误。这意味着ASP.NET Core和.NET的大多数基础功能领域都需要更新,以支持本地AOT,包括:

  • 托管API,包括WebApplication,等等。
  • Kestrel HTTP服务器
  • 配置和选项
  • 日志
  • 依赖性注入
  • 通用中间件
  • 认证和授权
  • 最低限度的API
  • 健康检查
  • 用ADO.NET进行数据访问(SQLite和PostgreSQL为主要目标)
  • 支持OpenAPI
  • 可观测性和诊断

此外,作为一个次要目标,我们将在实现以下功能领域的NativeAOT发布方面取得进展:

  • gRPC
  • SignalR
  • MVC Web APIs
  • Entity Framework

以下功能领域暂时不在NativeAOT支持的范围内:

  • MVC视图和Razor页面
  • Blazor服务器

开发经验原则

本地AOT有一些限制,这意味着在发布本地AOT时不支持.NET中的某些API和代码模式。这些包括依赖运行时JIT的功能,如动态代码生成和编译、汇编加载等,以及导致代码被本地AOT编译过程修剪掉的模式,这些都是执行应用程序所需要的,导致运行时失败。

在为ASP.NET Core增加对本地AOT的支持时,我们必须确保开发体验是这样的:开发人员可以合理地确定他们的应用程序在发布为本地AOT后将如何运行。如果当前的API和功能的设计方式与原生AOT不兼容,我们将利用包括源码生成器、分析器和代码修复器在内的工具,让现有的API与NativeAOT协同工作,或者让开发者以合理的方式更新他们的应用程序与NativeAOT协同工作。

阶段

阶段 1

这项工作的第一阶段是使用新的项目模板创建ASP.NET Core API项目,启用本地AOT,可以在没有任何警告或错误的情况下构建、发布和运行,并且满足可执行文件大小、启动时间、工作集和吞吐量的定义指标。

度量目标

这些指标主要以Linux为重点,因为它是主要的部署目标,但Windows和macOS上的大小仍将被跟踪,并与这些目标保持一致,因为在候选平台调查期间,它往往有助于感知。

  • 10MB的可执行文件大小
  • <50毫秒的启动时间(准备接受第一个请求)。
  • <50 MB的工作集内存足迹(准备接受第一个请求)。
  • <50 MB的工作集内存占用(处理完负载测试)。
  • 在Citrine perf环境下,默认CoreCLR RPS的5%以内

这里的 "默认"是指与基于CoreCLR的应用程序部署的默认配置相比,例如包括分层JIT。

阶段 2

第二阶段建立在第一阶段的基础上,使更多的"真实世界"的ASP.NET Core API应用程序成为本地AOT发布。这些应用程序将使用更多通常与在云环境中运行API应用程序有关的功能,包括AuthN/Z、数据访问、OpenTelemetry等。TrimmedTodo API应用程序将作为这种应用程序的最初例子。

度量目标

这些主要是以Linux为重点,因为这是主要的部署目标,但在Windows和macOS上的大小仍将被跟踪,并与这些目标保持一致,因为它往往有助于在候选平台调查中的感知。

  • 20MB的可执行文件大小
  • <150毫秒的启动时间(准备接受第一个请求)。
  • <60 MB工作集内存占用(准备接受第一个请求)。
  • <60 MB的工作集内存占用(处理完负载测试)。
  • RPS在Citrine性能环境中的目标待定

总结

我们从.NET社区最新的计划可以看出,ASP.NET Core将继续在云原生场景发力,通过支持NativeAOT来降低可执行文件大小、缩短启动时间降低内存占用,笔者本人是非常期待这样的更新,在之前笔者的文章AOT和单文件发布对程序性能的影响中测试了.NET6.0时代ASP.NET Core AOT的的一些数据,后面.NET8.0发布以后期待它的改进。

以下是.NET6.0 ASP.NET Core AOT的数据:





Github对应链接:https://github.com/dotnet/aspnetcore/issues/45910

【.NET 8】ASP.NET Core计划 - 支持更完善的AOT发布的更多相关文章

  1. 使Asp.net Core同时支持输出Json/Xml

    我们知道Asp.net Core是支持输出为Json格式的.同时也支持输出为xml格式.只要我们正确的配置.并在Request时指定正确的Accept,即可根据不同的Header来输出不同的格式. 前 ...

  2. 让你的ASP.NET Core应用程序更安全

    让你的ASP.NET Core应用程序更安全 对于ASP.NET Core应用程序,除了提供认证和授权机制来保证服务的安全性,还需要考虑下面的一些安全因素: CSRF 强制HTTPS 安全的HTTP ...

  3. asp.net core 实现支持多语言

    asp.net core 实现支持多语言 Intro 最近有一个外国友人通过邮件联系我,想用我的活动室预约,但是还没支持多语言,基本上都是写死的中文,所以最近想支持一下更多语言,于是有了多语言方面的一 ...

  4. asp.net core 实现支持自定义 Content-Type

    asp.net core 实现支持自定义 Content-Type Intro 我们最近有一个原本是内网的服务要上公网,在公网上有一层 Cloudflare 作为网站的公网流量提供者,CloudFla ...

  5. 将 ASP.NET Core 1.0 应用作为 docker 镜像发布 (Linux版)

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  6. ASP.NET Core中实现单体程序的事件发布/订阅

    标题:ASP.NET Core中实现单体程序的事件发布/订阅 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/10468058.html 项目源代码: ...

  7. 快速搭建CentOS+ASP.NET Core环境支持WebSocket

    环境:CentOS 7.x,.net core 2 以下.net core 2安装操作为官方方法.如果你使用Docker,那么更简单了,只需要docker pull microsoft/dotnet就 ...

  8. Asp.Net Core 已支持 gRPC-Web !!

    grpc-dotnet 项目在 PR #695 完成了 ASP.NET Core 服务与 .NET Core gRPC 客户端的 gRPC-Web 实现. 虽然目前还是实验性项目,但是并不阻碍我们为之 ...

  9. asp.net core计划任务探索之hangfire+redis+cluster

    研究了一整天的quartz.net,发现一直无法解决cluster模式下多个node独立运行的问题,改了很多配置项,仍然是每个node各自为战.本来cluster模式下的各个node应该是负载均衡的, ...

  10. Asp.net Core WebApi 支持json/xml格式的数据返回

    Asp.net core 在做webapi项目的时候,默认是只返回json格式的数据的,如果想要开启xml数据返回,需要在startup里配置如下: public void ConfigureServ ...

随机推荐

  1. 你不知道的React Developer Tools,20 分钟带你掌握 9 个 React 组件调试技巧

    壹 ❀ 引 React Developer Tools 是 React 官方推出的开发者插件,可以毫不夸张的说,它在我们日常组件开发中,对于组件属性以及文件定位,props 排查等等场景都扮演者至关重 ...

  2. .NET 7.0 重磅发布及资源汇总

    2022-11-8 .NET 7.0 作为微软的开源跨平台开发平台正式发布.微软在公告中表示.NET 7为您的应用程序带来了C# 11 / F# 7,.NET MAUI,ASP.NET Core/Bl ...

  3. 【OpenStack云平台】搭建openstack云平台

    1. 系统镜像 安装运行环境系统要求为CentOS7.5,内核版本不低于3.10. CentOS-7.5-x86_64-DVD-1804.iso Chinaskill_Cloud_iaas.iso 2 ...

  4. 云原生之旅 - 12)使用 Kaniko 在 Kubernetes上构建 Docker 容器镜像

    前言 前一篇文章[云原生之旅 - 11)基于 Kubernetes 动态伸缩 Jenkins Build Agents]有讲到在 Kubernetes Pod (Jenkins build agent ...

  5. i春秋Blog

    打开是个普普通通的hello world 然后有注册有登录 不多说我们直接注册登录试试 登录后有个POST选项,可以上传东西,先试试上传文字 没什么重要的回显 再上传一个文档试试 爆出提示:这里使用的 ...

  6. AI赋能音乐创作,人人都是音视频创作者

    华为HMS Core音频编辑服务(Audio Editor Kit)依托自身AI技术的研发优势,上线全新的歌声合成音色及伴奏,给音视频创作者提供更多的创作可能.在短视频场景中,用户自定义歌词的歌声结合 ...

  7. Java阻塞队列中的异类,SynchronousQueue底层实现原理剖析

    上篇文章谈到BlockingQueue的使用场景,并重点分析了ArrayBlockingQueue的实现原理,了解到ArrayBlockingQueue底层是基于数组实现的阻塞队列. 但是Blocki ...

  8. 重新认识下JVM级别的本地缓存框架Guava Cache(3)——探寻实现细节与核心机制

    大家好,又见面了. 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面.如果感兴趣,欢迎关注以获取后续更新. 通过<重新认识下JVM级别的本地 ...

  9. Execute Crond Service on openEuler

    一.Execute Crond Service on openEuler 1 crond 概述 crond就是计划任务/定时任务 常见有闹钟.PC端定时关机 shutdown -s -t 200,定时 ...

  10. Nginx 安装篇-1.19.9版本源码安装

    系统环境:CentOS 8.5 64位 [开始安装](此步骤引自网络教程) https://www.cnblogs.com/torchstar/p/16027538.html 教程比较详细,一步步操作 ...