.NET周报【10月第1期 2022-10-11】
本周精选
继C#实现await/async无栈协程几年后,davidwrighton实现了.NET绿色线程(有栈协程)的原型
https://github.com/dotnet/runtimelab/pull/2002
.NET Runtimelab中绿色线程的原型实现的PR,在不久的将来,.NET开发者也可以方便的用上有栈协程,目前的启动一个有栈协程的API如下所示:
FOH(冻结对象堆)正式合并进入.NET 8,将进一步提升整体性能
https://twitter.com/EgorBo/status/1579474949152313347?ref_src=twsrc^tfw
谈论FOH(冻结对象堆)的许多部分将被合并到.NET 8中,因此像typeof(x)
这样的东西在生成JIT代码时可以处理直接引用省略写屏障,进一步提升性能。对比的汇编代码如下所示:
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过去没有提供通过选择任意文件来比较文件的功能,但它已经开始考虑。 首先,他们已经开始试验一个名为 "文件差异 "的功能扩展,文章介绍了该扩展的功能。
如果你有兴趣,他们希望你能提供反馈和投票。
- File Differ - Visual Studio Marketplace
- [NEW] Is there a way to compare two files from solution explorer? - Visual Studio Feedback
用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
宣布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
宣布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移植过来的伪数据生成库。
网站、文件
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
.NET周报【10月第1期 2022-10-11】的更多相关文章
- .NET周报【10月第2期 2022-10-17】
主题 宣布 .NET 7 发布候选版本 2 - .NET Blog https://devblogs.microsoft.com/dotnet/announcing-dotnet-7-rc-2/ .N ...
- .NET周报【10月第3期 2022-10-25】
国内文章 聊一聊被 .NET程序员 遗忘的 COM 组件 https://www.cnblogs.com/huangxincheng/p/16799234.html 将Windows编程中经典的COM ...
- 【10月新版】Aspose.Pdf 10月新版V17.10发布 | 附下载
2019独角兽企业重金招聘Python工程师标准>>> Aspose.Pdf for .NET 17.10 更新 功能和改进 核心 概述 类别 PDFNET-38067 支持DICO ...
- .NET周报【11月第1期 2022-11-07】
国内文章 开源·安全·赋能 - .NET Conf China 2022 https://mp.weixin.qq.com/s/_tYpfPeQgyEGsnR4vVLzHg .NET Conf Chi ...
- .NET Conf 2022 – 11 月 8 日至 10 日
.NET Conf 2022 下周就正式开启了,时间是美国时间的 11月8日至10日..NET Conf 2022是一个免费的,为期三天的, 虚拟开发人员活动提供多种实时会话,其中包括来自社区和 .N ...
- 重大升级!SEER见证人,您的节点需要在10月28日前更新
SEER的区块链底层目前还处于不断完善中.一些新的完善更新会为区块链的基础设施--节点软件添加新的功能.理事会将会就是否接受新的节点版本进行共识投票,如果提案投票通过,将要求所有见证人在指定时间前将节 ...
- [C#项目开源] MongoDB 可视化管理工具 (2011年10月-至今)
正文 该项目从2011年10月开始开发,知道现在已经有整整5年了.MongoDB也从一开始的大红大紫到现在趋于平淡. MongoCola这个工具在一开始定位的时候只是一个Windows版本的工具,期间 ...
- 中国式商业智能报表ActiveReports免费公开课,10月20日开讲
ActiveReports公开课全方位报表解决方案,满足商业报表五大需求 [开课时间]10月20日[主讲老师]葡萄城报表产品经理[开课形式]网络在线公开课[活动费用]前50名免费 适合人群:报表开发人 ...
- JavaScript图表FusionCharts免费在线公开课,由印度原厂技术工程师主讲,10月13日发车
FusionCharts公开课达人还你做 轻松晋升图表大师 [开课时间]10月13日 14:30[主讲老师]印度原厂技术工程师[开课形式]网络在线公开课[活动费用]前50名免费 现在就可以报名哦 报 ...
随机推荐
- 2. 组复制技术架构 | 深入浅出MGR
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 1. 传统主从复制技术架构 传统主从复制的方式是在master节点上执行数据更新事务,而后记录这些事务到binlog中,再 ...
- 故障案例 | lsof是怎么"影响"MySQL计算打开文件句柄数的
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 lsof中附加不同参数产生的结果也不同,小心"踩坑". 1. ...
- 【Java面试】怎么防止缓存击穿的问题?
"怎么防止缓存击穿?" 这是很多一二线大厂面试的时候考察频率较高的问题. 在并发量较高的系统中,缓存可以提升数据查询的性能,还能缓解后端存储系统的并发压力.可谓是屡试不爽的利器. ...
- 【深入学习.Net】.泛型集合【体检管理系统】
基于泛型List的体检管理系统(蜗牛爬坡) 第五章[体检管理系统] 一.项目展示图(基于.net core6.0) 二.首先准备两个Model类 HealthCheckItem(项目类):Name(项 ...
- React报错之Functions are not valid as a React child
正文从这开始~ 总览 产生"Functions are not valid as a React child. This may happen if you return a Compone ...
- python与pycharm的安装与“试用”
python与pycharm的安装与"试用" 一.python解释器安装与启动 python解释器的安装 1.打开文件安装包运行页面 #python3.8 2.选择Customiz ...
- 【JAVA】学习路径64-补充-编写一个会抛异常的方法
有一些方法,在调用的时候有可能会出错,所以我们使用这些方法的时候会使用try catch. 比如InputStream里面的read()方法等等,那么这些方法是怎么实现抛异常的效果的呢? 能抛异常的方 ...
- 08_Linux基础-vim-tmux-字符编码
@ 目录 08_Linux基础-vim-tmux-字符编码 一. vim vim编辑器作用 vim模式 vim命令模式 vim编辑模式 vim末行模式 vim视图模式 vim替换模式 练习 vim常用 ...
- Jmeter处理响应报文中文乱码
Jmeter在访问发送请求的时候,响应内容如果有中文可能会显示乱码,原因应该是响应页面没有做编码处理,jmeter默认按照ISO-8859-1编码格式进行解析.而我们的响应报文却是utf-8的格式,所 ...
- liunx标准输入与输出
一.Linux提供了三种输入/输出通道给程序在linux中,每个进程都会有三个文件,并且这三个文件会进行重定向处理:1. 标准输入(STDIN) - 缺省为键盘2. 标准输出(STDOUT) - 默认 ...