.NET周报 【2月第2期 2023-02-11】

发布时间 2023-03-22 19:12:02作者: InCerry

国内文章

SQLSERVER的truncate和delete有区别吗?

https://mp.weixin.qq.com/s/wTIeW8rjj3cRzoaQcg2sOw

在面试中我相信有很多朋友会被问到 truncate 和 delete 有什么区别 ,这是一个很有意思的话题,本篇我就试着来回答一下,如果下次大家遇到这类问题,我的答案应该可以帮你成功度过吧。

一个用于访问 OpenAI GPT-3 API的 .NET SDK

https://mp.weixin.qq.com/s/91SBO2Z4ufnx0ry6X1uffQ

大家好,我是宝弟!今天给大家分享一个用于访问 OpenAI GPT-3 API的.NET SDK。此SDK包装了OpenAI原始的RestAPI。

一款使用Windows App SDK开发的小说阅读应用

https://mp.weixin.qq.com/s/Gv-Xc4sbD-4zS9JCjhVuMA

大家好,我是宝弟!今天给大家推荐一款使用Windows App SDK开发的小说阅读应用CleanReader(干净阅读),CleanReader是原生的Windows应用,支持Windows 11 系统。适合喜欢阅读网文,或者本地轻量阅读的用户。

.NET与大数据

https://mp.weixin.qq.com/s/32by2AB91JWKTeJclpKHZQ

当别人做大数据用Java、Python的时候,我使用.NET做大数据、数据挖掘,这确实是值得一说的事。写的并不全面,但都是实际工作中的内容。

.NET多播委托和事件看这篇文章就够了

https://mp.weixin.qq.com/s/4x7CN5p724X-1lmumomSdg

多播委托和事件在某种程度上是相似的,但是仍有一些重要的区别:定义:多播委托是一种特殊类型的委托,允许多个方法注册为对委托的响应者。而事件是一种通知机制,允许一个对象向外界发出通知,当特定事件发生时。

CA周记 - 用 .NET 启动你的 DJI Ryze Tello 无人机

https://mp.weixin.qq.com/s/9uUeA5-KP6X_OidLqrjpkw

大疆的 DJI Ryze Tello 是入门级的无人机,不仅在 STEM 教育中有非常广泛的应用,也可以作为编程入门的首选。通过 UDP 协议调用 DJI Ryze Tello SDK 可以让 DJI Ryze Tello 无人机执行起飞,降落,转向以及不同的花式动作。本文将会通过 .NET 创建应用控制 DJI Ryze Tello。

C#实现聊天消息渲染、图文混排(支持Windows、Linux)

https://www.cnblogs.com/zhuweisky/p/17095413.html

在实现聊天软件时,渲染文字表情图文混排是一项非常繁琐的工作,再加上还要支持GIF动图、引用消息、撤回消息、名片等不同样式的消息渲染时,就更加麻烦了。好在我们可以使用 ESFramework 提供的 IChatRender 组件,使用它我们就能轻松实现类似于微信聊天消息的渲染效果。IChatRender 支持 Windows、Linux(包括国产OS)。在Windows平台上提供了基于 WinForm 和基于 WPF 的实现,在Linux上则是基于.NET Core 实现的。

如何避免让线程摸鱼,请用异步技术 async await 拿捏他~

https://www.cnblogs.com/weixb/archive/2023/02/09/17104642.html

很多的Web框架,收到一个请求,就会创建一个线程来处理,如果片刻间内有100个用户请求这个方法,那么就得安排100个线程,
有没有方法让第1个线程在等待数据返回时,先去接待第N+1个用户(校验请求参数什么的)这样就能大大减少线程数量~

【.NET 8】ASP.NET Core计划 - 支持更完善的AOT发布

https://www.cnblogs.com/InCerry/archive/2023/02/08/Support-publishing-ASP-NET-Core-API-apps-with-Native-AOT.html

我们知道在.NET7.0中一个令人激动的特新就是支持了NativeAOT,我们可以通过NativeAOT生成本机程序,由于无需JIT编译,所以无需安装.NET Runtime,也进一步的提升了.程序的启动速度,降低了程序的体积,在客户端软件开发、ServerLess等场景会有不错的前景。

不用Blazor WebAssembly,开发在浏览器端编译和运行C#代码的网站

https://www.cnblogs.com/rupeng/archive/2023/02/10/17107662.html

本文中,我将会为大家分享一个如何用.NET技术开发“在浏览器端编译和运行C#代码的工具”,核心的技术就是用C#编写不依赖于Blazor框架的WebAssembly以及Roslyn技术。

.NET 团队 更新了 .NET 语言策略

2023年2月6日 ,.NET团队在官方博客上发布了.NET 语言策略的更新文章,具体参见 https://devblogs.microsoft.com/dotnet/update-to-the-dotnet-language-strategy/。微软在.NET平台上提供3种语言 - C#,F#和Visual Basic。新的 .NET 语言策略更新了这三者并把最新的文章更新在 Microsoft Learn 上发布 .NET 语言策略。

主题

【英文】更新.NET语言策略 - .NET Blog

https://devblogs.microsoft.com/dotnet/update-to-the-dotnet-language-strategy/

关于微软对 .NET 中语言的战略更新。

目前 .NET 中主要的三种语言是 C#、F# 和 Visual Basic,有关微软对这三种语言的战略的文件已经更新。

【英文】Windows App SDK的实验发布1.3实验版 - Windows应用程序 | Microsoft Learn

https://learn.microsoft.com/en-us/windows/apps/windows-app-sdk/experimental-channel#version-13-experimental-130-experimental1

Windows App SDK 1.3 Experimental-1已经发布。

这个版本引入了几个新功能,包括XAML Backdrop API(例如,将Mica应用于窗口背景),以及用于访问应用程序窗口的Window.AppWindow API。

【中文】Rider EAP版本现在支持中文语言包 | .NET工具博客

https://blog.jetbrains.com/zh-hans/dotnet/2023/02/07/introducing-the-rider-localization-eap-for-chinese-japanese-and-korean/

日语、中文和韩语的本地化语言包现在可用于JetBrains Rider 2023.1 EAP3。

一些本地化工作目前正在进行中,并通过IDE和YouTrack接受反馈。 该公司还表示,未来的目标包括将ReSharper本地化。

【英文】ReSharper结束Visual Studio 2010和2012的开发工作 | .NET工具博客

https://blog.jetbrains.com/dotnet/2023/02/10/ending-development-for-vs-2010-2012/

宣布ReSharper 2023.1及以后版本将不再积极支持Visual Studio 2010和2012。

安装程序集成选项将被保留,并不会立即不可用,但功能将不那么有保障,支持将被优先考虑。

文章、幻灯片等

【日文】快速制作图像分类应用的过程 - Qiita

https://qiita.com/SoeAtsu/items/4d22493c5dc8367162db

一篇关于在WPF和ML.NET中构建一个识别和分类图像的应用程序的文章。

【英文】SpecFlow - Cucumber in C#

https://daniel-delimata.medium.com/specflow-cucumber-in-c-e642c63469b2

如何使用SpecFlow、Cucumber在.NET中测试你的Web应用程序。

【英文】生成RequestDelegate的响应书写表达式:最小化API的幕后花絮-第六部分

https://andrewlock.net/behind-the-scenes-of-minimal-apis-6-generating-the-response-writing-expression/

本文在《极简API的幕后》系列中介绍了RequestDelegate如何生成输出响应的表达式(Expression)。

【日文】我想把Blazor中的验证逻辑组件化

https://zenn.dev/microsoft/articles/viewside-validation

如何以组件的形式将Blazor中的自定义验证逻辑组件化。

【日文】我想缩小Blazor中ValidationSummary显示的错误信息,如asp-validation-summary

https://zenn.dev/microsoft/articles/blazor-validationsummary-tips

如何在ValidationSummary组件中只显示与特定模型相关的错误,而不是所有属性。

【英文】.NET注释月刊|2023年2月|.NET工具博客

https://blog.jetbrains.com/dotnet/2023/02/08/net-annotated-monthly-february-2023/

JetBrains的2023年2月相关总结文章。

【日文】如何在C#服务器上取得配置文件 - Qiita

https://qiita.com/Shaula/items/177e8c16ec9b8b102c7a

如何使用dotnet-trace获得在服务器(如容器)上运行的.NET应用程序的跟踪。

【日文】用.NET探查IBM i数据库 - Qiita

https://qiita.com/tom_m_m/items/9481e8b619463ab9c20f

关于在IBM i(ppc64le架构)上从.NET应用程序访问Db2数据库的文章。

【英文】C# 提示:不要使用 nameof 来给常量一个值 - Code4IT

https://www.code4it.dev/csharptips/do-not-use-nameof-for-constants

观点:不建议在nameof中使用常量的名称,然后将其作为表名等使用,因为如果不慎改变,会破坏代码。

【英文】用Bogus生成样本数据

https://wildermuth.com/2023/01/29/generating-sample-data-with-bogus/

如何用Bogus生成假数据。

【英文】异步无效 - 如何驯服异步的噩梦 - Dev Leader

https://www.devleader.ca/2023/01/27/async-void-how-to-tame-the-asynchronous-nightmare/

关于async void的问题,以及如何在使用它作为事件处理程序时也能设法捕获异常等等。

【英文】必须遵守C规则,没有例外

https://ericsink.com/native_aot/no_exceptions.html

关于NativeAOT本地调用的方法不得抛出异常。

【英文】使用Visual Studio开发隧道来处理Twilio Webhooks

https://dev.to/twilio/use-visual-studio-dev-tunnels-to-handle-twilio-webhooks-58dc

如何使用Visual Studio开发隧道来处理Twilio webhooks。

【英文】计时的成本

https://ayende.com/blog/198977-B/the-cost-of-timing-out

关于在有大量并发执行的环境中,调用CancellationToken.CancelAfter进行超时处理会导致大量的Timer集。

RavenDB有一种方法,就是有周期性的定时器,并分批处理,以减少成本。

【英文】在没有Blazor WebAssembly的情况下,开发一个网站,在浏览器上编译和运行C#代码

https://yangzhongke8.medium.com/without-blazor-webassembly-develop-a-web-site-that-compiles-and-runs-c-code-on-browser-c381873f6d03

如何从JavaScript调用用WebAssembly构建的C#代码,而不使用Blazor WebAssembly的Blazor部分。

【英文】同步-异步场景下的性能测试

https://wapplegate.com/performance-testing/

所谓Sync-over-Async的性能,即异步方法的同步等待。

它总结了几个代码场景和结果,如延迟和RPS,取决于并行请求的数量。

开源库、存储库、工具等

drasticactions/MauiFeed: 跨平台 .NET Feed 阅读器。

https://github.com/drasticactions/MauiFeed

.NET MAUI 实现的 Feed 阅读器。

可以从 Microsoft Store 安装针对 Windows 的构建。

ForNeVeR/xaml-math: 一组 .NET 库,用于使用 LaTeX 排版风格渲染数学公式,适用于基于 WPF 和 Avalonia XAML 的框架。

https://github.com/ForNeVeR/xaml-math

用于在 WPF 和 Avalonia 中使用 LaTeX 风格渲染数学公式的库。

https://twitter.com/fvnever/status/1622750145958887424?s=12

LEGO/AsyncAPI.NET: AsyncAPI.NET SDK 包含了 .NET 中 AsyncAPI 文档的有用对象模型。

https://github.com/LEGO/AsyncAPI.NET/

用于读取 AsyncAPI(基于 OpenAPI 的事件驱动 API 版本)文档的库。

https://twitter.com/legoengineering/status/1623255496030388227?s=12

深入探索

[WIP] .NET 8 的 ASP.NET Core 路线图 · Issue #44984 · dotnet/aspnetcore

https://github.com/dotnet/aspnetcore/issues/44984

.NET 8 的 ASP.NET Core 路线图相关的问题。

HttpContent.ReadAsByteArrayAsync 中的过多分配 · Issue #81628 · dotnet/runtime

https://github.com/dotnet/runtime/issues/81628

HttpContent.ReadAsByteArrayAsync()相比HttpClient.GetByteArrayAsync()存在 4 倍的分配,是否过多。

实际上,HttpContent.ReadAsByteArrayAsync() 会因为可以多次读取而缓存或复制,因此如果要避免当前情况,最好使用 Stream 进行读取等。

推文

https://twitter.com/badamczewski01/status/1623788674558091265

什么是 .NET 中的 PGO(我很快就会再次谈论编译器,但它是为一家公司准备的,所以没有视频:/)

可以看到一开始生成的汇编代码比较低效,而且很长。经过PGO优化以后,代码变得非常高效。image-20230213212924368


https://twitter.com/Dave_DotNet/status/1623600088231874562

.NET 8 中即将推出的NativeAOT 大小改进(预览版 1) ... Linux 比原来小50%

image-20230213213516979


https://twitter.com/okyrylchuk/status/1623079620307296260

EF 7 改进了字符串的转换。索引方法。 可以在下面比较 EF Core 6 和 EF 7 的 SQL 输出。

image-20230213214134353

版权声明

由于笔者没有那么多时间对国内的一些文章进行整理,欢迎大家为《.NET周报-国内文章》板块进行贡献,需要推广自己的文章或者框架、开源项目可以下方的项目地址提交Issue或者在我的微信公众号私信。

格式如下:

  • 10~50字左右的标题
  • 对应文章或项目网址访问链接
  • 200字以内的简介,如果太长会影响阅读体验

https://github.com/InCerryGit/.NET-Weekly

.NET性能优化交流群

相信大家在开发中经常会遇到一些性能问题,苦于没有有效的工具去发现性能瓶颈,或者是发现瓶颈以后不知道该如何优化。之前一直有读者朋友询问有没有技术交流群,但是由于各种原因一直都没创建,现在很高兴的在这里宣布,我创建了一个专门交流.NET性能优化经验的群组,主题包括但不限于:

  • 如何找到.NET性能瓶颈,如使用APM、dotnet tools等工具
  • .NET框架底层原理的实现,如垃圾回收器、JIT等等
  • 如何编写高性能的.NET代码,哪些地方存在性能陷阱

希望能有更多志同道合朋友加入,分享一些工作中遇到的.NET性能问题和宝贵的性能分析优化经验。目前一群已满,现在开放二群。

如果提示已经达到200人,可以加我微信,我拉你进群: ls1075

另外也创建了QQ群,群号: 687779078,欢迎大家加入。