2021年,推荐你使用.NET 5的7大原因

在.NET Core的早期版本中,每个版本都发布了重要的性能改进,从.NET Core 2.0到.NET Core 2.1到.NET Core 3.0的每一次版本升级,都有着大量的性能优化和提升,而随着大一统的.NET 5的发布,我发现.NET 5实现了更多的性能改进,鉴于微软的努力,使得.NET生态在国内也得到了长足的发展,而现在的你们,有否计划转入.NET5的怀抱?下面是我的感受,再给你烧把火,尽快投入.NET 5的怀抱来吧。

webmote

使用它,因为它速度很快

在去年7月份Beta阶段,微软大佬史提芬已经阐述了非常多的性能改进功能点,请进传送门:[https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-5/]。是的,.NET5为提高性能付出了很多努力,刚读完这篇文章的时候,我已经尝试了.NET 5的Beta版本,并测试了部分性能,因为对于工程师而言,性能提高的消息总是令人振奋,当然我总结了部分特色,希望你也能很快尝试它。

使用原因1:横扫六国,天下凝一

天下大势,分久必合,合久必分。

多年前的微软有着五花八门的框架:.net FrameWork、.net core、mono 等等,而微软的.NET5,其主要目标之一是提供一个单一的、跨平台的.NET 运行时和具有统一运行时行为和开发者体验的框架。在第一次宣布这个项目时,.NET 团队的程序经理 Richard Lander 强调了这个项目的重要性:

**未来只会有一个.NET**,可以支持 Windows、Linux、macOS、iOS、Android、tvOS、watchOS 和 WebAssembly,等等。我们将引入新的.NET API、运行时功能和语言特性作为.NET 5 的一部分。此外,我们想清楚地告诉大家,**.NET 5 是.NET 平台的未来**。

使用原因2:GC优化

- 减少 第0代(gen0)和第1代(gen1)回收次数,通过GC标记可到达对象的过程的信息可以转移到其他线程,并且可以部分省略每个线程中同一过程的工作量。优化了GC Gen0,1将内存返回给OS的过程。

- 通过更改GC的统计方法,成功减少了由于GC的扫描冲突引起的锁定。这提高了多核期间的可扩展性

- 通过支持Intel AVX512(与矢量化排序一起引入)来加快GC中的排序

- 通过在后台GC进行减少前台GC的挂起来减少锁定时间。

尽管我试图对其进行总结,但即使通过查看源代码和说明,也有很多事情我无法理解,有兴趣你可以看看其他大佬分享的GC相关的优化。

使用原因3:从coreclr(C / C ++)到corelib(C#)的端口已升级。

在优化GC的同时,将C / C ++本地实现的coreclr移植到C#实现的corelib的工作也得到了推进。

C#本质上是安全的,因此,本机实现越少,它的安全性就越高。

但是好处不止于此。在coreclr中的本机代码运行时,甚至GC也将等待它完成。换句话说,使用更少的本机实现和更多的C#实现,GC本身就不太可能等待。

结果,GC.Collect()大大减少了延迟时间。

使用原因4:Span<T>.Sort取代了Array.Sort

排序是一个非常繁重的过程,并且我们无法避免。由于引入Span<T>.Sort,情况变得非常好了,请看[https://docs.microsoft.com/zh-cn/dotnet/api/system.memoryextensions.sort?view=net-5.0](https://docs.microsoft.com/zh-cn/dotnet/api/system.memoryextensions.sort?view=net-5.0)

上述corelib的好处使排序本身更快。通常在C#中对数组进行排序,但是在Span中执行此操作可以节省很多处理,例如数组边界检查。

它也可以在Array.Sort内部运行,Span<T>.Sort其优点是.NET Framework 4.8的两倍,并且对.NET Core 3.1也提升了百分之30左右。

使用原因5:编译器和JIT对Span<T>进行了极大的优化

.NET Core 3.1进行了很多优化,在.NET 5中进一步增强了这些优化功能。

 特别是对 ReadOnlySpan<T>,现在其局部方法固定地保存在静态区域中,而不是堆栈中,还有不需要Span<T>初始化的场景,进行0占用优化,等等

 

相关这些的类型太多了。我唯一能说的是减少了代码大小,减少了处理时间,这是一件好事。

使用原因6:类型处理更快

C#强制转换功能由Cast Helper类在内部缓存。由于此实现方式的改进,ref相关的使用速度已得到显着提高。

除了强制转换之外,泛型方法也变得更加通用,并且调用泛型方法的成本也降低了。

使用原因7:改进库性能

- 字符串处理

- 正则表达式

- 异步/等待

- Json序列化

- LINQ

- EF core

- 集合

- 网络操作

- 正则表达式

- Blazor

关键是,**无需重写现有代码**,所有这些都会受益。

.NET 5很棒。仅其中一项性能改进就可以激发您转向.NET 5。

感恩

开头链接的博客内容确实很棒。感谢史提芬。

我们还要感谢每天为.NET和C#的进步和提速做出贡献的所有工程师。

下一步

我正在计划迁移公司使用的框架到.NET 5上,并且完成异步操作的改造。

希望在今后,有更多迁移相关的文章和大家分享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301190.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java util map,我应该如何命名java.util.Map?

I have a java.util.Map that maps from a logical name to a set of parameters to use with that name.Map howShouldINameThee ...;What is the best name for this map?Should I go simple and just call this parameters or parametersMap?Do I include information ab…

如何使用VIM的Help

很多时候在用到vim的命令的时候&#xff0c;都会去网上搜索&#xff0c;殊不知&#xff0c;如果熟练使用VIM的help&#xff0c;可以达到事半功倍的效果。 下面介绍如何使用VIM的help&#xff1a; 1. 在vim的一般模式中输入&#xff1a;help可以进入vim的help界面 这里面注…

可编程智能小车,100种玩法,从3岁玩到15岁,培养孩子“最强大脑”

▲数据汪特别推荐点击上图进入玩酷屋毫无疑问&#xff0c;数学、科学和计算机科学是解决21世纪现代问题的三大支柱。当现在各式各样的兴趣班和教育辅导班快要呈现饱和状态时&#xff0c;一种新兴的教育活动正如火如荼地进行着那就是少儿编程。少儿编程奇迹般的红火&#xff0c;…

php 数组什么情况下是空的?

转载于:https://www.cnblogs.com/persist/p/3183819.html

Java千万数据导入mysql_java之5分钟插入千万条数据

虽说不一定5分钟就插入完毕&#xff0c;因为取决去所插入的字段&#xff0c;如果字段过多会稍微慢点&#xff0c;但不至于太慢。10分钟内基本能看到结果。之前我尝试用多线程来实现数据插入(百万条数据)&#xff0c;半个多小时才二十多万条数据。线程池数据插入核心代码:Execut…

WPF实现时间轴(仿Gitee)

WPF开发者QQ群&#xff1a; 340500857 | 微信群 -> 进入公众号主页 加入组织“ 前言&#xff0c;接着上一篇圆形菜单。”欢迎转发、分享、点赞、在看&#xff0c;谢谢~。 01—效果预览效果预览&#xff08;更多效果请下载源码体验&#xff09;&#xff1a;02—代码如下一、…

java如何用键盘输入_java中如何从键盘输入(附代码)

一、java不像C中拥有scanf这样功能强大的函数&#xff0c;大多是通过定义输入输出流对象。常用的类有BufferedReader&#xff0c;Scanner。相关java视频教程推荐&#xff1a;java实例程序&#xff1a;视频教程1、利用 Scanner 实现从键盘读入integer或float 型数据//import jav…

.text 0.958之间居的中文汉化下载

.text 0.958之间居的中文汉化下载 http://218.19.140.219/uploadfile/040426192172.rar posted on 2004-06-14 20:19 浙林龙哥 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/huqingyu/archive/2004/06/14/15666.html

JS partial-application

为什么80%的码农都做不了架构师&#xff1f;>>> /* Title: Partial applicationDescription: the process of fixing a number of arguments to a function, producing another function of smaller arity */var partialAny (function(aps) {// This function wil…

每日一笑 | 我写了一段代码,为什么不能运行呢?

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图源网络&#xff0c;侵权删&#xff09;

使用IQueryable扩展方法实现复杂查询条件

问题在业务开发中&#xff0c;经常要处理比较复杂的查询条件&#xff0c;如下图&#xff1a;如果任一输入有值&#xff0c;则必须作为查询条件之一。示例代码如下&#xff1a;IQueryable<User> query repository.GetAll();if(name!null) {query query.Where(p>p.Name…

java字符串拼接例子_Java详解【String】+【StringBuilder vs StringBuffer】+【字符串拼接】...

String详解注意区分对象和对象的引用首先来看一下我在jdk中找到的String源代码&#xff0c;这里只截取开头的小小一部分public final class Stringimplements java.io.Serializable, Comparable, CharSequence {/** The value is used for character storage. */private final …

阿里日均纳税超1.4亿;AI换脸骗过美侦查;日本民众哄抢令和报纸;辟谣教学楼发现大量金矿;上海拨通首个5G通话;这就是今日大新闻...

今天是4月2日农历二月廿七今天星期二下面是今天的大新闻阿里巴巴日均纳税超1.4亿&#xff08;IT168&#xff09;4月1日&#xff0c;阿里巴巴在“2020财年首日”发布消息称&#xff1a;2018全年&#xff0c;阿里巴巴集团和蚂蚁金服集团总计向国家纳税516亿元&#xff0c;同比增长…

大家好!

在博客园申请帐号已经有好长时间了&#xff0c;可是一直也没有写点什么&#xff0c;可能是太忙了吧&#xff08;其实是懒&#xff09;&#xff01;以后我会多写些文字&#xff0c;毕竟这是一件好事。转载于:https://www.cnblogs.com/hubin/archive/2004/08/16/33928.html

腾讯大湘网某处csrf(city.hn.qq.com)可投诉刷留言

触发点&#xff1a; http://city.hn.qq.com http://city.hn.qq.com/auto/cshop&mbbs&id668 POST /msgboard/message.php HTTP/1.1 Host: c1.city.qq.com Connection: keep-alive Content-Length: 201 Cache-Control: max-age0 Accept: text/html,application/xhtmlxml,…

c#:细说时区、DateTime和DateTimeOffset在国际化中的应用

先说下结论&#xff1a;如果系统不考虑全球化的话&#xff0c;那么我们不用考虑时区的问题&#xff0c;因为我们可以认为中国境内的计算机全部用的是北京时间。1. 时区的来源和划分地球自转一圈是360度&#xff0c;共24小时&#xff0c;所以1小时15度&#xff0c;即&#xff1a…

java注解 sql_mybatis中注解映射SQL示例代码

前言本文主要给大家介绍了关于mybatis注解映射sql的相关内容&#xff0c;分享出来供大家参考学习&#xff0c;下面话不多说了&#xff0c;来一起看看详细的介绍&#xff1a;结果集分页有时我们需要处理海量数据&#xff0c;由于数据量太大&#xff0c;所以不能一次取出所有的数…

超赞的“数据与算法之美”资料分享!

相信&#xff0c;一直关注着我们的同学们都知道&#xff0c;小思妹分享了好多好多的资料给大家。为了方便新来的同学自取&#xff0c;小思妹又重新整理了一遍&#xff0c;直接点以下标题即可跳转&#xff01;这是我见过的最全的训练数据集&#xff0c;没有之一&#xff01;送你…

mysql服务的启动和停止 net stop mysql net start mysql

第一招、mysql服务的启动和停止 net stop mysql net start mysql 第二招、登陆mysql 语法如下&#xff1a; mysql -u用户名-p用户密码 键入命令mysql -uroot -p&#xff0c;回车后提示你输入密码&#xff0c;输入12345&#xff0c;然后回车即可进入到mysql中了&#xff0c;mysq…

在ASP.NET Core微服务架构下使用数据库切分和扩展, 并用JMeter进行负载测试

原文链接&#xff1a;https://itnext.io/how-to-scale-an-asp-net-core-microservice-and-sharded-database-load-test-with-jmeter-1a8c7292e7e3现在&#xff0c;您将扩展应用程序并运行多个微服务和数据库的容器实例。您将使用Docker Compose和HAProxy负载均衡器&#xff1a;…