大家好! 今天,我们看一下.NET Core平台中出现的各种芯片和更改,并将它们与Framework进行比较。 我将本文分为多个模块,以更好地理解。 对于将要切换到.NET Core或已经在使用.NET Core的人来说,这篇文章会很有趣。
堆栈技术
当前,我们有三个平台:.NET Framework,Mono和.NET Core。 每个平台都包含以下技术:
NET框架 -WPF,WinForms,ASP.NET(DNX实现),WCF
NET Core -UWP,ASP.NET Core,WA,Xamarin(.NET Standard),Avalonia等
Mono -Xamarin(PCL,共享项目),Unity,ASP.NET,WinForms(跨平台)
NET Core(3.0) -一切与.NET Core以上+ WPF和WinForms,ML.NET相同
NET标准
还有一个.NET标准。 这是一组类,方法和接口,可让您为上面列出的所有平台编写和使用通用代码。 您也可以在其上编写控制台应用程序。 简而言之,这是相同的PCL,但是它可以在上面列出的所有平台上使用。
跨平台
我不会将您的注意力集中在此上,我只列出NET Core项目的OS支持:
• Windows
• Linux
• MacOS
此外,还支持在Linux和Windows上的ARM处理器下启动。
相依性
作为交叉兼容性的一部分,应用程序开发平台包括模块化基础架构。 它是通过NuGet发出的,您可以访问批处理功能,而不是一个大型程序集。 作为开发人员,您可以创建仅包含必需的NuGet包的轻型应用程序,这将使您的程序更安全,更高效。
模块化基础架构还可以更快地更新.NET Core平台,因为可以单独更新和发布受影响的模块。
Csproj
现在,让我们更深入地详细了解项目背后的内容。 创建新项目时,每个人都遇到文件MyProject1.csproj(名称可能不同)。 该文件负责该项目的编译设置,其他项目或库(库)的依赖项以及更多其他内容。
我为您提供了一个示例,说明了如何决定将一个项目重写为.NET Standard。 让我们来看看之前(框架)的情况:

不幸的是,这个文件不能完全放在我的PC上(仍然有参考文献)。 现在,让我们看一下转移后的情况:

在NET Core和.NET Standard中,csproj大大简化了。 特别是“弹道”导弹可能会注意到其中一些已经改变。 我删除了不必要的内容,并替换为更方便的工具。 重写csproj之后,我注意到使用NuGet软件包的时间开始显着减少,并且,如您所知,编辑新版本的csproj更加方便,因为它不会被多余的行所困扰。
性能与改进
•修改随机
•修改后的HttpClient
•优化的周期
•优化列表,数组
•优化的流,MemoryStream
•还有更多
在本文中,我不会考虑所有更改。 这将是另一篇文章。 但是,让我们看一下List集合上的一个小例子:
var list = new List<int>(); for (int i = 0; i < 100000000; i++) { list.Add(i); list.RemoveAt(0); }
我在两个平台上都通过
Benchmarkdotnet.org运行了它。 经过测试,我得到了以下结果:
核心2.2.4 x64 RyuJIT方法 :BenchmarkList
平均值 :370.1毫秒
错误 :0.3761毫秒
标准差 :0.3518毫秒
框架4.7.2 x64 RyuJIT方法 :BenchmarkList
平均值 :481.9毫秒
错误 :1.210毫秒
标准差 :1.011毫秒
如您所见,使用Core的操作速度(有时)有很大不同。
Microsoft不仅在尝试为开发人员提供便捷的开发工具,而且还在改善可改进和优化项目的基本功能。
层编译
此功能使运行时更加适应使用JIT编译器来提高启动性能和最大化吞吐量。
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp2.2</TargetFramework> <LangVersion>7.3</LangVersion> <TieredCompilation>true</TieredCompilation> <Platforms>AnyCPU;x64</Platforms> </PropertyGroup> </Project>
尽快编译项目。
优化最常用的方法。
此功能使您的项目构建速度更快,并为您提供几乎相同的性能。 我们测试了此功能,这是NET Core项目的一项智能功能,可减少编译时间。 多级编译会稍微减慢您的应用程序的工作速度,我不建议将其包含在生产服务器中,但是对于调试而言,它不仅仅具有实际功能,还可以节省程序员的时间。
结论
Microsoft试图改善.NET平台开发人员的生活。 我们公司出现的所有上述“好东西”使我们能够使环境更加开放和可扩展。 希望您对此表示赞赏。 不要害怕切换到新技术堆栈并使用其他功能。
谢谢您的关注。 希望您喜欢。