2021年,推荐你使用.NET 5的7大原因
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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上,并且完成异步操作的改造。
希望在今后,有更多迁移相关的文章和大家分享。
以上是关于2021年,推荐你使用.NET 5的7大原因的主要内容,如果未能解决你的问题,请参考以下文章