.NET 6 攻略大全(三)( 二 )


IL 修整
该团队一直致力于为多个版本进行 IL 修整 。 .NET 6 代表了这一旅程向前迈出的重要一步 。 我们一直在努力使更激进的修剪模式安全且可预测 , 因此有信心将其设为默认模式 。 TrimMode=link 以前是可选功能 , 现在是默认功能 。
我们有一个三管齐下的修剪策略:

  • 提高平台的修剪能力 。
  • 对平台进行注释以提供更好的警告并使其他人也能这样做 。
  • 在此基础上 , 让默认的修剪模式更具侵略性 , 以便让应用程序变小 。
由于使用未注释反射的应用程序的结果不可靠 , 修剪之前一直处于预览状态 。 有了修剪警告 , 体验现在应该是可预测的 。 没有修剪警告的应用程序应该正确修剪并且在运行时观察到行为没有变化 。 目前 , 只有核心的 .NET 库已经完全注解了修剪 , 但我们希望看到生态系统注释修剪并兼容修剪 。
▌减小应用程序大小
让我们使用SDK 工具之一的crossgen来看看这个修剪改进 。 它可以通过几个修剪警告进行修剪 , crossgen 团队能够解决 。
首先 , 让我们看一下将 crossgen 发布为一个独立的应用程序而无需修剪 。 它是 80 MB(包括 .NET 运行时和所有库) 。
然后我们可以尝试(现在是旧版).NET 5 默认修剪模式 , copyused. 结果降至 55 MB 。
新的 .NET 6 默认修剪模式link将独立文件大小进一步降低到 36MB 。
我们希望新的link修剪模式能更好地与修剪的期望保持一致:显着节省和可预测的结果 。
默认启用警告
修剪警告告诉您修剪可能会删除运行时使用的代码的地方 。 这些警告以前默认禁用 , 因为警告非常嘈杂 , 主要是由于 .NET 平台没有参与修剪作为第一类场景 。
我们对大部分 .NET 库进行了注释 , 以便它们产生准确的修剪警告 。 因此 , 我们觉得是时候默认启用修剪警告了 。 ASP.NET Core 和 Windows 桌面运行时库尚未注释 。 我们计划接下来注释 ASP.NET 服务组件(在 .NET 6 之后) 。 我们希望看到社区在 .NET 6 发布后对 NuGet 库进行注释 。
您可以通过设置<SuppressTrimAnalysisWarnings>为true来禁用警告 。
更多信息:
  • 修剪警告
  • 修剪介绍
  • 准备 .NET 库以进行修剪
与本机 AOT 共享
我们也为Native AOT 实验实现了相同的修剪警告 , 这应该会以几乎相同的方式改善 Native AOT 编译体验 。
数学
我们显着改进了数学 API 。 社区中的一些人已经在享受这些改进 。
面向性能的 API
System.Math 中添加了面向性能的数学 API 。 如果底层硬件支持 , 它们的实现是硬件加速的 。
新 API:
  • SinCos 用于同时计算 Sin 和 Cos 。
  • ReciprocalEstimate 用于计算 1 / x的近似值 。
  • ReciprocalSqrtEstimate 用于计算1 / Sqrt(x) 的近似值 。
新的重载:
  • Clamp , DivRem , Min 和 Max 支持 nint 和 nuint 。
  • Abs 和 Sign支持 nint 。
  • DivRem 变体返回 tuple 。
性能改进:
ScaleB被移植到 C# 导致调用速度提高了 93% 。 感谢亚历克斯·科文顿 。
大整数性能
改进了从十进制和十六进制字符串中解析 BigIntegers。 我们看到了高达 89% 的改进 , 如下图所示(越低越好) 。
感谢约瑟夫·达席尔瓦 。
▌ComplexAPI 现在注释为 readonly
现在对各种 API 进行了注释 , System.Numerics.Complexreadonly 以确保不会对readonly值或传递的值进行复制 in 。
归功于 hrrrrustic。
▌BitConverter现在支持浮点到无符号整数位广播
BitConverter 现在支持 DoubleToUInt64Bits, HalfToUInt16Bits, SingleToUInt32Bits, UInt16BitsToHalf, UInt32BitsToSingle, 和UInt64BitsToDouble. 这应该使得在需要时更容易进行浮点位操作 。

特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。