5

.NET周报【10月第1期 2022-10-11】 - InCerry

 1 year ago
source link: https://www.cnblogs.com/InCerry/p/dotnet_week_22_10_1.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

.NET周报【10月第1期 2022-10-11】

继C#实现await/async无栈协程几年后,davidwrighton实现了.NET绿色线程(有栈协程)的原型

https://github.com/dotnet/runtimelab/pull/2002

.NET Runtimelab中绿色线程的原型实现的PR,在不久的将来,.NET开发者也可以方便的用上有栈协程,目前的启动一个有栈协程的API如下所示:

Pasted%20image%2020221014151516.png

FOH(冻结对象堆)正式合并进入.NET 8,将进一步提升整体性能

https://twitter.com/EgorBo/status/1579474949152313347?ref_src=twsrc^tfw

谈论FOH(冻结对象堆)的许多部分将被合并到.NET 8中,因此像typeof(x)这样的东西在生成JIT代码时可以处理直接引用省略写屏障,进一步提升性能。对比的汇编代码如下所示:

Pasted%20image%2020221014151309.png

Bing 广告宣传平台迁移至.NET6 - .NET Blog

https://devblogs.microsoft.com/dotnet/bing-ads-campaign-platform-journey-to-dotnet-6/

一个关于Bing的搜索广告活动平台向.NET 6迁移的案例研究(+AKS)。

该平台建立在几十个分布式服务上,每秒处理数千个请求,时间不到100ms。 通过WCF托管在一个(仅仅是 "解除 "的)Windows虚拟机中的.NET框架4.6和SOAP服务。 在Windows虚拟机中托管了一个WCF的SOAP服务和一个.NET框架4.6。

文章介绍了转移到新的.NET平台的原因。

原因主要有以下五点:

  • 跨平台,如使用容器。
  • .NET Core开发在高性能、语言特性和.NET Framwork停止更新
  • 由于快速迭代改进,减少了创新摩擦
  • 开放源代码。
  • 卓越的工具,如CLI工具、SDK风格的项目和消除绑定重定向等

迁移过程中,库的顺序是".NET Framwork 4.6→. Framwork .7→.NET Standard 2.0",而应用的顺序是".NET Framwork 4.6→.NET Framwork 4.7→.NET Core 3.1→.NET 5→.NET 6",按顺序排列。 .NET Framwork 4.6并不完全支持.NET Standard,迁移到.NET Standard并不容易。

该项目在迁移过程中提出了几个挑战和解决方案。

首先,该项目依赖于一些NuGet软件包,这意味着必须更新软件包和替换旧库。 不兼容的软件包被重新包装,并以支持.NET标准的形式发布到内部软件包中,甚至没有源代码的软件包也被反编译和修补,使其与.NET标准兼容。

通过转移到PackageReference方法,解决了绑定重定向的问题,这也解决了菱形依赖性问题。 由于有大量的.csproj,迁移是通过SDK式的转换工具实现的。 随后,.NET团队发布了一个名为try-convert的类似工具。 他们还试图集中管理软件包的版本,以减少软件包依赖关系的复杂性。 (文章中的链接。Microsoft.Build.CentralPackageVersions是一个新的NuGet的 中央软件包管理,它似乎是[NuGet的]的前身。

最后,还有对WCF的依赖。 该服务是由WCF用SOAP服务构建的,由于它是对用户开放的,所以不可能迁移到类似gRPC的东西上,所以最后创建了CoreWCF,它是WCF的一个子集,并进行了迁移。 谈到.NET框架与.NET的关系时,他说:"我们的目标是使我们的产品和服务更有竞争力。

从WCF到CoreWCF的迁移对.NET有很大的影响,可以减少40-50%的内存使用。

总而言之,向.NET 6的迁移是一次大规模的、痛苦的但值得的经历,从大型代码库的迁移中总结出以下经验:

  • 迁移到.NET框架4.7或.NET框架4.8
  • 将所有项目转换为SDK风格,并在开始工作前使用PackageReference。
  • 在.NET框架和.NET项目之间可以共享代码。
  • 使用集中的软件包管理,以方便迁移到新的NuGet软件包上

从少年到天才:一个优化的故事 | by Israel Lot | Oct, 2022 | ITNEXT

https://itnext.io/from-junior-to-genius-an-optimization-story-ab20afc8159d

一篇关于调整代码的文章,根据计算32位校验和的代码,在不同的阶段进行计算。

文章从一个简单的实现,到一个不安全的实现,到一个棘手的实现,到一个简单的实现,到一个使用SIMD的实现,最后到一个85倍的性能优化。

Console.ReadKy在.NET 7中的优化 - .NET Blog

https://devblogs.microsoft.com/dotnet/console-readkey-improvements-in-net-7/

文章描述了.NET 7中的重写和修改,使Console.ReadKey在Unix/Linux上表现得更好。

一段时间以来,在Unix/Linux上的Console.ReadKey的行为,在输入的组合键和处理修改键方面,已经发现了一些BUG。 为了解决这个问题,在.NET 7中的代码已经被重新编写了。

文章介绍了在重写前为增加自动测试覆盖率所采取的方法,内部系统调用的调用,旧的实现和新的实现。

它还引入了runtimeconfig.json和环境变量设置,恢复到.NET 6兼容行为。 这些兼容性行为将在.NET 8中被删除。

在Visual Studio中对文件进行比较 - Visual Studio Blog

https://devblogs.microsoft.com/visualstudio/comparing-files-in-visual-studio/

关于考虑在Visual Studio中实现文件比较功能的问题。

Visual Studio过去没有提供通过选择任意文件来比较文件的功能,但它已经开始考虑。 首先,他们已经开始试验一个名为 "文件差异 "的功能扩展,文章介绍了该扩展的功能。

如果你有兴趣,他们希望你能提供反馈和投票。

用MSAL.NET对.NET MAUI应用程序进行认证 - .NET Blog

https://devblogs.microsoft.com/dotnet/authentication-in-dotnet-maui-apps-msal/

宣布在Microsoft Identity.Client 4.47.0(MSAL.NET)中支持.NET MAUI。

A宣布.NET MAUI社区工具包 v1.3 - .NET Blog

https://devblogs.microsoft.com/dotnet/announcing-the-dotnet-maui-community-toolkit-v13/

.NET MAUI Community Toolkit v1.3已经发布。

.NET MAUI Community Toolkit v1.3现已发布,包括状态栏样式、Gravatar图片来源、动画增强和源链接支持等内容。

发布11.0.0版预览2 · AvaloniaUI/Avalonia

https://github.com/AvaloniaUI/Avalonia/releases/tag/11.0.0-preview2

Avalonia 11.0.0 Preview 2已经发布。

它包括几个稳定性改进和各种修复。

Rider 2022.3 EAP 2: 新的用户界面,改进的单元测试,更好的动态程序分析和更多的内容. | The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2022/10/07/rider-2022-3-eap-2/

Rider 2022.3 EAP 2已经发布。

新的基于IntelliJ的IDE UI,改进了Search Everywhere、工具窗口和Solution Explorer,Linux和macOS支持Rider的内置dotMemory,支持C# 11,改进了单元测试探索器,改进了 支持.NET MAUI,支持在IIS中启动,动态程序分析(数据库访问),等等。

宣布NuGet PackageReference支持针对.NET Core和.NET 5或更高版本的C++/CLI MSBuild项目 - C++ Team Blog

https://devblogs.microsoft.com/cppblog/announcing-nuget-packagereference-support-for-c-cli-msbuild-projects-targeting-net-core/

宣布NuGet PackageReference支持Visual Studio 2022 17.3版或更高版本中针对.NET Core或.NET 5或更高版本的C++/CLI MSBuild项目。

文章、幻灯片等

一个将Xamarin.Forms库移植到MAUI的故事

https://speakerdeck.com/muak/xamarin-dot-formsraiburariwo-mauiniyi-zhi-sitahua

谈及将Xamarin.Forms的库移植到.NET MAUI的幻灯片。

在这里,我们要介绍一下.NET MAUI,包括实施方法的不同和技巧。

MAUI的当前状态和进化点| ドクセル

https://www.docswell.com/s/hiro128_777/KW79X5-2022-09-30-184910

幻灯片显示了.NET MAUI与Xamarin.Forms的架构差异,对各种工具的支持现状等。

.NET注释月刊 | 2022年10月 | The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2022/10/06/net-annotated-monthly-october-2022/

2022年10月,JetBrains公司发布了一篇与.NET相关的信息汇总文章

[C#] .NET使用NamedPipe进行进程间通信(IPC)(WPF示例) - Qiita

https://qiita.com/kobayashi_stmn/items/7de42805eba009deebaa

关于如何在.NET 6 WPF应用程序中使用NamedPipe进行进程间通信的文章。

Visual Studio的Azure Marketplace镜像现在支持Microsoft Dev Box - Visual Studio Blog

https://devblogs.microsoft.com/visualstudio/visual-studios-azure-marketplace-images-now-support-microsoft-dev-box/

宣布Azure Marketplace Visual Studio镜像现在由Microsoft Dev Box支持。

在.NET 6中为强类型的配置对象添加验证信息

https://andrewlock.net/adding-validation-to-strongly-typed-configuration-objects-in-dotnet-6/

关于如何在.NET 6 Microsoft.Extensions.Configuration中为强类型的配置对象添加验证的文章。

了解OpenTelemetry .NET (8) 手动追踪连接示例:通过Azure服务总线在应用程序之间连接追踪

https://tech.tanaka733.net/entry/2022/10/opentelemetry-dotnet-08

关于如何使用Azure服务总线在服务之间连接请求的痕迹的文章。

使用.NET 7的Blazor自定义元素来渲染动态内容

https://jonhilton.net/blazor-custom-elements/

关于如何使用自定义元素在Blazor中构建动态元素的文章。

我们是如何通过删除闭包分配来实现5倍的管道执行速度的

https://particular.net/blog/pipeline-and-closure-allocations

关于通过减少NServiceBus中的lambda捕获(分配)来提高性能的文章。

即使是.NET MAUI也想打开键盘! (安卓)

https://zenn.dev/test_myname/articles/d982b67cf0615f

关于如何在.NET MAUI中显示/隐藏Android屏幕键盘的文章。

Blazor WASM在GH页面上的自定义404页面

https://dev.to/dotnet/blazor-wasm-custom-404-page-on-gh-pages-1o99

当Blazor WebAssembly托管在GitHub Pages上时,如何在访问不存在的页面时显示一个自定义错误页面的文章。

图书馆、资料库、工具等

GitHub - xoofx/Antlr4Ast: Antlr4Ast是一个.NET库,为ANTLR4/g4文件提供一个解析器和抽象语法树(AST)。

https://github.com/xoofx/Antlr4Ast

一个能解析ANTLR4/g4文件以创建AST的库。

Hey .NET folks, it's a rainy Sunday here so I just released a new .NET library https://t.co/3tlFpUlJnt to parse ANTLR4/g4 files into a lightweight AST useful for codegen scenarios.
I'll use this library for #starklang to generate the data oriented syntax from an ANTLR g4 spec! 🏎️

— Alexandre Mutel (@xoofx) October 9, 2022

disruptor-net/Disruptor-net: 使用.NET实现 LMAX Disruptor

https://github.com/disruptor-net/Disruptor-net

高性能的线程到线程的消息传递框架库。

bchavez/Bogus: 一个用于C#、F#和VB.NET的简单的假数据生成器。基于著名的faker.js,并从其移植。

https://github.com/bchavez/Bogus

从faker.js移植过来的伪数据生成库。

网站、文件

Twitter

Performance-testing with the industrial-grade #BenchmarkDotNet in LINQPad is now as simple as selecting your code and pressing Ctrl+Shift+B. Full integration, with customizable real-time output! https://t.co/5mvykpZBX2 pic.twitter.com/PaleWcQBUd

— LINQPad·Joe Albahari (@linqpad) October 3, 2022

LinqPad正在引入一个整合功能,在LINQPad上按下Ctrl+Shift+B可以在BenchmarkDotNet上获得一个即时的基准测试。

原文版权:mayuki

原文链接:https://github.com/mayuki/WeekRef.NET/blob/master/input/2022/2022-10-11.md

翻译版权:InCerry

翻译链接:https://github.com/InCerryGit/WeekRef.NET/blob/master/input_zh-CN/2022/2022-10-11.md


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK