.NET周报 【2月第2期 2023-02-11】
国内文章
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发布
我们知道在.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
Windows App SDK 1.3 Experimental-1已经发布。
这个版本引入了几个新功能,包括XAML Backdrop API(例如,将Mica应用于窗口背景),以及用于访问应用程序窗口的Window.AppWindow API。
【中文】Rider EAP版本现在支持中文语言包 | .NET工具博客
日语、中文和韩语的本地化语言包现在可用于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的幕后花絮-第六部分
本文在《极简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#代码
如何从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优化以后,代码变得非常高效。
https://twitter.com/Dave_DotNet/status/1623600088231874562
.NET 8 中即将推出的NativeAOT 大小改进(预览版 1) ... Linux 比原来小50%
https://twitter.com/okyrylchuk/status/1623079620307296260
EF 7 改进了字符串的转换。索引方法。 可以在下面比较 EF Core 6 和 EF 7 的 SQL 输出。
版权声明
- 国内板块由 InCerry 进行整理 : https://github.com/InCerryGit/WeekRef.NET
- 其余内容来自 Myuki WeekRef,由InCerry翻译(已获得授权) : https://github.com/mayuki/WeekRef.NET
由于笔者没有那么多时间对国内的一些文章进行整理,欢迎大家为《.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,欢迎大家加入。