支持所有 .NET 应用程序类型

  .NET5 统一版本之后将支持所有 .NET 应用程序类型:Xamarin、ASP.NET、IoT 和桌面。此外,它将利用一个单独的 CoreFX/基类库 (BCL)、两个独立的运行时和运行时代码库(因为很难将两个截然不同的运行时单独作为源)和一个工具链(比如 dotnet CLI)。结果将是行为、API 和开发人员体验之间的一致性。例如,在每个不同平台上将运行一组库,而不是三个 System.* API 实现。

将框架、运行时和开发人员工具集统一到一个代码库中

  .NET 的统一有很多优点。将框架、运行时和开发人员工具集统一到一个代码库中,将减少开发人员(Microsoft 和社区)需要维护和扩展的重复代码量。此外,正如我们最近对 Microsoft 的期许,所有 .NET 5 源代码都将是开放源代码。

  合并后,所有平台都可以使用每个单独框架独有的许多功能。例如,这些平台的 csproj 类型将统一为深受欢迎的、简单的 .NET Core csproj 文件格式。因此,.NET Framework 项目类型将能够利用 .NET Core csproj 文件格式。虽然 Xamarin 和 .NET Framework(包括 WPF 和 Windows 窗体)csproj 文件需要转换为 .NET Core csproj 文件格式,但该任务类似于从 ASP.NET 转换为 ASP.NET Core。幸运的是,得益于诸如 ConvertProjectToNETCore3 之类的工具,现在实现起来更加容易(请参阅 bit.ly/2W5Lk3D)。

支持JIT与AOT两种编译模式

  另一个显著差异是 Xamarin 和 .NET Core/.NET Framework 的运行时行为。前者使用静态编译模型,使用提前 (AOT) 编译将源代码编译为平台的本机源代码。而 .NET Core 和 .NET Framework 使用即时 (JIT) 编译。幸运的是,在 .NET 5 中,JIT和AOT这两种模型都将受支持,具体取决于项目类型目标。例如,可以选择将 .NET5 项目编译为单个可执行文件,该文件将在运行时使用 JIT 编译器 (jitter),或使用本机编译器在 iOS 或 Android 平台上工作。大多数项目都会利用 JIT,但对于 iOS 来说,所有代码都是 AOT。对于客户端 Blazor,运行时是 Web 程序集 (WASM),Microsoft 打算 AOT 编译少量托管代码(大约 100 kb 到 300 kb),而其余代码将被解释。(AOT 代码很大,因此网络成本是一个相当大的负担。)

创建单个可执行文件

  在 .NET Core 3.0 中,可以编译到单个可执行文件,但该可执行文件实际上是运行时所需执行的所有文件的压缩版本。在执行该文件时,它首先将自己展开到一个临时目录中,然后从包含所有文件的目录中执行应用程序的入口点。相反,.NET 5 将创建一个实实在在的、可直接就地执行的单个可执行文件。

互操作性

  .NET 5 的另一个显著特性是与 Java 和 Objective-C(包括 Swift)中源代码的互操作性。自早期版本以来,这一直是 Xamarin 的一个特性,但将扩展到所有 .NET5 项目。例如,你将能够在 csproj 文件中包含 jar 文件,并且能够直接从 .NET 代码调用 Java 或 Objective-C 代码。(遗憾的是,对 Objective-C 的支持可能会比 Java 晚)。 需要注意的是,.NET5 和 Java/Objective-C 之间的互操作性只针对进程内通信。与同一台计算机上的其他进程甚至不同计算机上的进程的分布式通信可能需要序列化为基于 REST- 或 RPC- 的分布式调用。

容器支持的优势

  新的互联网技术时代已经来临了,容器、Kubernetes、DevOps、微服务、云原生才是技术前进的方向,其中容器技术属于基石。从.NET Core 诞生直到.NET5,都能持续看到平台对容器技术的官方支持和适配改进,里面还强调了有着更小的容器镜像。.NET5+Docker容器化后还有其他语言无可比拟的优势!

1、体积更小

.NET5的镜像体积都很小,alpine的镜像更小,带上应用程序也才80M,对于微服务分布式架构而言,更小的体积意味着更少的下载带宽,更快的分发下载速度。

2、占用资源更少

.NET5的CLR+默认http://ASP.NET Core框架页面启动后,仅需22M内存,同比Java8已经需要120M了,运行时资源占用也更低,意味着更高的部署密度和更低的计算成本。

3、启动速度更快

.NET5的 CLR启动速度非常快,而启动速度就意味着交付效率和回滚效率,在动辄数百个副本微服务时,启动速度就是个非常重要的特性。

4、容器感知,低配运行

.NET5 默认更好的支持Docker资源限制,官方团队也在努力让.NET5成为真正的容器运行时,使其在低内存环境中具有容器感知功能并高效运行,远超其他平台。

云原生支持的优势

.NET团队一直将重点放在.NET5领域,并引入了新的改进和功能:

  • REST API 可以更简单地构建测试,并将其发布到诸如Azure API管理之类的应用程序中。此外,还可以在默认情况下由OpenAPI生成客户端。
  • gRPC gRPC可以构建与WCF类似的高性能基于合约的API。
  • 较小,更快的微服务 .NET团队在.NET5中完成的一件很酷的事情是,您可以选择一个ASP .NET项目,然后选择要发布的项目,这将生成一个20m的小型自包含应用程序,完全不需要在计算机上运行.NET。
  • 使用WSL和Linux进行跨平台开发
  • 高性能反向代理(YARP)

参考文献:

  • https://devblogs.microsoft.com/dotnet/announcing-net-5-0/
  • https://docs.microsoft.com/zh-cn/archive/msdn-magazine/2019/july/csharp-net-reunified-microsoft%E2%80%99s-plans-for-net-5

.NET平台系列18 .NET5的超强优势的更多相关文章

  1. .NET平台系列15 .NET5的吊炸天性能改进

    系列目录     [已更新最新开发文章,点击查看详细] .NET5的性能改进测试功能 Benchmark.NET现在是衡量.NET代码性能的规范工具,可轻松分析代码段的吞吐量和分配. .NET5的性能 ...

  2. .NET平台系列13 .NET5 统一平台

    系列目录     [已更新最新开发文章,点击查看详细] 时机决定一切,对于 .NET5 也是如此.实际上微软.NET团队在开始开发 .NET Core 时,对 .NET Framework 的全面重写 ...

  3. .NET平台系列17 .NET5中的ARM64性能

    系列目录     [已更新最新开发文章,点击查看详细] .NET团队使.NET 5大大提高了常规性能和ARM64性能.在<.NET5中的性能改进>博客中可以查看总体改进情况.在这篇文章中, ...

  4. .NET平台系列16 .NET5/Asp.Net Core 在全球Web框架权威性能测试 Web Framework Benchmarks 中的吊炸天表现

    系列目录     [已更新最新开发文章,点击查看详细] TechEmpower Web Framework Benchmarks 是许多Web应用程序框架执行基本任务(如JSON序列化.数据库访问和服 ...

  5. .NET平台系列14 .NET5中的新增功能

    系列目录     [已更新最新开发文章,点击查看详细] .NET5中不包含的内容 尽管 .NET5 框架中提供了一组重要 API,但它并不包括过去20年左右开发的所有 API,但是.NET Stand ...

  6. .NET平台系列21:云原生时代 .NET5 雄霸天下

    系列目录     [已更新最新开发文章,点击查看详细] 随着互联网持续高歌猛进,相关技术名词也是层出不穷.微服务.容器化.DevOps.ServerLess.FaaS,这两年最火的当属云原生Cloud ...

  7. .NET平台系列22:.NET Core/.NET5/.NET6 对比 .NET Framework

    系列目录     [已更新最新开发文章,点击查看详细] 在我的博客<.NET平台系列2 .NET Framework 框架详解>与 <.NET平台系列7 .NET Core 体系结构 ...

  8. .NET6 平台系列4 .NET开源之路

    系列目录     [已更新最新开发文章,点击查看详细] .NET平台是微软于2000年推出的Windows操作系统的应用软件开发框架,发展至今形成巨大的技术栈,涉及多语言(支持C#.F#.VB.NET ...

  9. .NET 平台系列6 .NET Core 发展历程

    系列目录     [已更新最新开发文章,点击查看详细] 在我的上一篇博客<.NET平台系列5 .NET Core 简介>中主要介绍了.NETCore的基本情况,主要包括.NET跨平台的缘由 ...

随机推荐

  1. LNMP环境搭建Wordpress博客

    目录 LNMP架构工作原理 yum源安装 网站源包安装 LNMP是Linux Nginx MySQL/MariaDB  Php/perl/python 的简称,是近些年才逐渐发展起来的构架,发展非常迅 ...

  2. poj2112 二分最大流+Floyd

    题意:      一个农场主有一些奶牛,和一些机器,每台机器有自己的服务上限,就是一天最多能给多少头奶牛挤奶,给你任意两点的距离,问你让所有的奶牛都被挤奶时,奶牛于机器最远距离的最近是多少. 思路: ...

  3. POJ2669不错的最大流 竞赛问题(枚举King的个数)

    题意:       有n个人,任意两个人都比一次赛(一共比了n*(n-1)/2场),赢一场得到一分,最后的时候如果得分最高,或者是自己打败了所有比自己得分都高的人就算是King,给你每个人的最后得分, ...

  4. Python 爬虫 BeautifulSoup4 库的使用

    BeautifulSoup4库 和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据.lxml 只会局部遍历,而Be ...

  5. idea中修改代码大小设置

    修改代码大小 控制台字体大小

  6. 【opencv】Java+eclipse+opencv 环境搭建 helloword入门demo

    文章为博主原创,纯属个人理解,如有错误欢迎指出. 如需转载,请注明出处. 引入jar包 引入配置文件 到此环境配置完成!!! 可能会出现的问题: 1. jdk版本不一致导致发生异常.如图 build ...

  7. Mybatis学习之自定义持久层框架(四) 自定义持久层框架:生产sqlSession

    前言 上一回我们完成了数据库配置文件的读取和解析工作,有了这些准备工作,我们就可以与数据库创建连接和会话了,所谓sqlSession就是数据库的会话,一切增删查改操作都是在与数据库的会话中完成,下面我 ...

  8. VS2010编写32位和64位dll环境配置,以及判断dll是多少位

    前言 最近在编写dll注入程序的时候,因为想注入到系统进程,结果发现总是注入失败.自闭了好长一会发现我忘记了我的系统是64位的,系统进程也是64位的,而我编写的待注入的DLL是32位了,所以才导致失败 ...

  9. Java集合详解(二):ArrayList原理解析

    概述 本文是基于jdk8_271版本进行分析的. ArrayList是Java集合中出场率最多的一个类.底层是基于数组实现,根据元素的增加而动态扩容,可以理解为它是加强版的数组.ArrayList允许 ...

  10. 【转载】kvm迁移

    https://www.jianshu.com/p/60132085a3c9 kvm分静态和动态迁移,静态就是关机迁移,比较简单,动态迁移就是不关闭服务器进行迁移.静态迁移:确定虚拟机关闭 https ...