standard1.1.2
.Net现代化是一个缓慢的过程。 尽管Microsoft 在开源.Net Core中提供新的,更快的跨平台运行时并不困难,但将代码和开发人员带到新平台上却变得更加困难。
最大的问题是兼容性。 .Net Framework已有近二十年的历史了,如果要继续运行代码,则任何新版本都需要支持API和功能的遗留问题。 API实现之间的细微差异可能会导致灾难性错误,或者更糟的是,可能会在版本之间更改输出。 因此,尽管.Net Core比完整的.Net Framework更小和更快,但是为一个代码编写的代码无法在另一个代码上运行,因为没有通用的SDK。
与.Net Core中的兼容性相比,.Net Framework中的兼容性是一个更大的问题,因为.Net位于许多不同的地方。 它是Windows 10 通用Windows平台(UWP)的核心 ,是跨设备Xamarin和相关的Mono项目的基础,并为Unity的3D虚拟现实,增强现实和游戏环境提供动力。 不能保证为一个.Net编写的代码可以在另一版本上运行-就是说,没有通用库的一点帮助。
.Net Standard公平竞争环境
这就是.Net Standard的用处。它是一组通用的库和API ,可提供统一的编程界面。 针对.Net Standard核心功能的代码将在安装了它的任何平台上运行,尽管您可能需要为每个目标平台编写特定于UI的代码。 这并不奇怪:为ASP.Net Core编写的代码与针对在Android上运行的Xamarin或在HoloLens上运行Unity的代码具有不同的用户界面要求。
一年前,微软发布了.Net Core 2.0和.Net Standard 2.0 。 这是对.Net通用库的重大升级,并且是第一个真正使编写跨平台代码成为可能的版本。 尽管它没有.Net Framework的所有API,但是它提供了熟悉的开发经验很长的路要走,尽管将旧版.Net代码移植到新工具和库中仍然存在问题,容易得多。
去年, .Net Core进行了重大更新 ,目前正在开发2.2版。 对.Net Core进行了足够的低级更新,对于Microsoft来说,推出新的.Net Standard版本2.1以支持这些新功能并与最新版本的.Net编译器一起使用是有意义的。 当.Net Standard 2.1发布时,它将为您提供约3,000个新API ,并支持某些.Net Core的最大性能升级。
这并不意味着您需要在代码发布后立即将其升级到新库。 请务必注意,您使用的.Net Standard版本是您要定位的所有.Net版本的兼容性层。 最好针对最低版本的.Net Standard,因为您将拥有更多的兼容性选项。 当然,您可以将.Net Standard库的多个版本作为目标,但这会增加复杂性-与.Net Standard的整个目的相反,后者是通过减少所需使用的API版本数量来简化代码库。
Span<T>
改善.Net性能
.Net Core 2.1中最重要的变化之一是Span<T>
类型的引入。 它为.Net提供了一种处理内存的新方法 ,该方法使它可以更有效地管理缓冲区,并通过减少内存复制来提高性能。 Microsoft将其描述为“基本类型”,因为它不能与较早的运行时或编译器一起使用。 这意味着.Net Core 2.1拥有一组用于处理跨度的新API,.Net Standard需要使用这些API来扩展其现有API。
Span<T>
是重要的新结构,尤其是在编写高性能代码时。 在您可能不得不对标准类型进行多次分配的地方(例如,对于要处理的字符串的元素),现在可以使用存储原始字符串的内存,并且无需分配更多即可处理原始字符串记忆。
这是一种快速简便的工作方式,尤其是如何将Span<T>
及其Slice
运算符实现为许多常见.Net函数的重载。 同样,您可以使用它直接与异步网络操作一起使用,从而快速读取数据流。
Span<T>
脱颖而出的地方是使用微服务,尤其是当您需要处理复杂的API调用并且必须使用JSON数据时。 在低级网络缓冲区中处理数据,尤其是使用可以直接处理UTF8数据的API,可以节省大量开销,并可以大大提高代码的性能。
.Net Core 2.1中的许多新功能已经可以通过单独的NuGet软件包进行访问,但是这种方法会使代码更加复杂,需要您管理所有应用程序之间的依赖关系。 将这些新功能引入.Net Standard 2.1,将为您提供一个访问核心API的地方。
新的.Net治理模型
.Net Standard 2.1最有趣的方面可能是它将新的API引入.Net,而不是致力于实现现有的概念。 这是一个重要的更改,因为它还意味着Microsoft将需要更改其运行开源.Net程序的方式。 引入Span<T>
类的新功能后,需要通过新的.Net Standard API使它们可用。 展望未来,.Net标准的新版本将以特定的API领域为主题。 使用.Net Standard 2.1,很明显,该主题正在加速内存管理。
为了减少对整个.Net生态系统的影响,现在有一个审查过程来处理新添加的API。 在主要.Net实现的代表以及Miguel de Icaza担任董事会主席的情况下,很明显,社区希望确保.Net Core的快速开发不会破坏其他实现。 这可能意味着必须坚持使用NuGet的某些功能,但是Visual Studio的最新版本中对.Net工具的改进应该使它更易于处理。
.Net Standard 2.1希望继续微软当前的行动,因为它试图平衡.Net Core中的最新技术水平,同时平衡其余生态系统的需求。 添加大量新的API将对这里有所帮助,并且该项目的新治理模型应使其他.Net实现更容易更快地拾取新代码并构建更新,性能更高的代码。 要了解为什么这对开发人员有好处,您只需想象一下Unity中HoloLens混合现实应用程序的响应能力,该应用程序可以在缓冲区级别处理3D变换。
翻译自: https://www.infoworld.com/article/3319646/what-net-standard-21-means-to-you.html
standard1.1.2