.NET周报 【3月第1期 2023-03-03】

周报 ,NET · 浏览次数 : 1034

小编点评

# OpenTelemetry Dotnet 这个文档介绍如何使用OpenTelemetry dotnet收集和展示ASP.NET Core应用程序的性能数据。它包括如何使用Dena.CodeAnalysis.Testing进行开发的会议幻灯片,以及如何利用动态程序分析优化EF Core数据库查询。 **主要内容:** * OpenTelemetry dotnet收集的性能数据 * Dena.CodeAnalysis.Testing进行开发的会议幻灯片 * 动态程序分析优化EF Core数据库查询的实现 * 如何使用OpenTelemetry dotnet收集和展示性能数据 **其他内容:** * 文档中还包含一些关于WPF路线图的说明 * 文档中还包含一些关于如何进行性能分析的说明 **注意:** * 文档中包含一些关于WPF路线图的说明 * 文档中包含一些关于如何进行性能分析的说明 * 文档中没有分享一些实际的性能分析优化经验

正文

国内文章

我做的FFmpeg开源C#封装库Sdcb.FFmpeg

https://www.cnblogs.com/sdflysha/archive/2023/02/27/dotnet-conf-china-2022-ffmpeg.html

FFmpeg是知名的音频视频处理软件,我平时工作生活中会经常用到。但同时我也是.NET程序员,我以业界普遍使用的开源项目FFmpeg.AutoGen为基础,我我自己动手做了一个Sdcb.FFmpeg。

记一次 .NET某家装ERP系统 内存暴涨分析

https://www.cnblogs.com/huangxincheng/archive/2023/02/27/17159384.html

前段时间微信上有一位老朋友找到我,说他的程序跑着跑着内存会突然爆高,有时候会下去,有什么会下不去,怀疑是不是某些情况下存在内存泄露,让我帮忙分析一下,其实内存泄露方面的问题还是比较好解决的,看过这个dump之后觉得还是有一定的分享价值,拿出来和大家分享一下吧。

.NET AsyncLocal 避坑指南

https://www.cnblogs.com/eventhorizon/archive/2023/03/01/17170301.html

本文介绍了AsyncLocal的常见用法,常踩的坑和避坑指南,另外引入HttpContextAccessor的实现原理来介绍这些内容。

C#神器"BlockingCollection"类实现C#神仙操作

https://www.cnblogs.com/baibaomen-org/archive/2023/02/28/17162795.html

如果你想玩转C# 里面多线程,工厂模式,生产者/消费者,队列等高级操作,就可以和我一起探索这个强大的线程安全提供阻塞和限制功能的C#神器类.

【C#异步】异步多线程的本质,上下文流转和同步

https://www.cnblogs.com/1996-Chinese-Chen/archive/2023/03/02/17172773.html

net同僚对于async和await的话题真的是经久不衰,这段时间又看到了关于这方面的讨论,最终也没有得出什么结论,其实要弄懂这个东西,并没有那么复杂,简单的从本质上来讲,就是一句话,async 和await异步的本质就是状态机+线程环境上下文的流转,由状态机向前推进执行,上下文进行环境切换,在状态机向前推进的时候第一次的movenext会将当前线程的环境上下文保存起来......

解读C#编程中最容易忽略7种编写习惯!

https://www.cnblogs.com/xiongze520/archive/2023/02/28/17164309.html

1、拼接字符串 2、嵌套异常处理 3、for和foreach的选择 4、验证简单的原始数据类型 5、处理对象实现IDisposable接口 6、声明公共变量 7、利用System.Data.DataTable访问数据

.NET静态代码织入——肉夹馍(Rougamo) 发布1.4.0

https://www.cnblogs.com/nigture/p/17174199.html

肉夹馍(https://github.com/inversionhourglass/Rougamo)通过静态代码织入方式实现AOP的组件,其主要特点是在编译时完成AOP代码织入,相比动态代理可以减少应用启动的初始化时间让服务更快可用,同时还能对静态方法进行AOP。

难译 | windbg 乐趣之道(上、下)

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

https://mp.weixin.qq.com/s/TLrnRmnPt3Aiep-dnSF8gA

Yarden Shafir 分享了两篇非常通俗易懂的,关于 windbg 新引入的调试数据模型的文章。链接如下:

part1:https://medium.com/@yardenshafir2/windbg-the-fun-way-part-1-2e4978791f9b

part2:https://medium.com/@yardenshafir2/windbg-the-fun-way-part-2-7a904cba5435

本文是第一部分的译文。在有道词典、必应词典、谷歌翻译的大力帮助下完成,感谢以上翻译工具,我只是一个搬运工。强烈建议英文好的朋友阅读原文,因为在翻译的过程中不可避免的按我的理解做了调整。

.NET 8 预览版 1 发布!

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

.NET 8 是一个长期支持(LTS) 版本。这篇文章涵盖了推动增强功能优先级排序和选择开发的主要主题和目标。.NET 8 预览版和发布候选版本将每月交付一次。像往常一样,最终版本将在 11 月的某个时候在 .NET Conf 上发布。

跨平台ChatGpt 客户端

https://mp.weixin.qq.com/s/F5Qb-RyxBCSEpU9uOQIEmQ

一款基于Avalonia实现的跨平台ChatGpt客户端 ,通过对接ChatGpt官方提供的ChatGpt 3.5模型实现聊天对话。


由于本周时间比较赶,没有对国际板块内容做语言标注。

主题

尝试 Visual Studio 2022 v17.6 Preview 1 版本 - Visual Studio Blog

https://devblogs.microsoft.com/visualstudio/try-visual-studio-2022-v17-6-preview-1/

Visual Studio 2022版本17.6预览版1已经发布。

文章介绍了该版本包含的以下新功能:

  • IDE的生产力
    • 大括号对的颜色化
    • Git行暂存器的取消阶段
    • 参见GitHub问题
  • .NET
    • 在C#中使用IntelliCode的API使用实例(GitHub搜索集成)。
    • 支持远程调试的.NET Visualizer
    • ARM64设备上的.NET MAUI工具化
  • C++ (游戏)
    • 虚幻引擎日志查看器
    • 代码分析集成--虚幻标题工具
  • C++(跨平台)
    • CMake调试器
    • Unix环境下的远程文件资源管理器
    • C/C++导入嵌入式STM32CubeIDE项目

C# for Godot 4.0中的新内容

https://godotengine.org/article/whats-new-in-csharp-for-godot-4-0/

C#中的新内容与游戏引擎Godot 4.0中的变化有关。

在Godot 4.0中,很多方面都发生了变化,最重要的是SDK从Mono变成了.NET。 移动平台仍然是Mono运行时。 随着这一变化,Mono模块现在被称为.NET模块。

在许多其他变化中,源码生成器、整数和浮点类型、类型和成员名称,以及向NuGet发布程序集的.NET指南。

Sixlabors:宣布ImageSharp 3.0.0

https://sixlabors.com/posts/announcing-imagesharp-300/

ImageSharp 3.0.0已经发布。

该版本包括各种API的简化和高达14.4倍的性能改进等改进。ImageSharp 3.0.0以.NET 6为目标框架,结束了对传统框架的支持,并且是第一个采用新的Six Labors Split License的版本。

微软团队的权限服务迁移到.NET 6 - .NET博客

https://devblogs.microsoft.com/dotnet/microsoft-teams-permission-service-migration-to-dotnet-6/

关于Microsoft Teams的权限服务迁移到.NET 6的案例研究。

从.NET Framework 4.7.2到.NET 6,性能提高了100%,延迟降低了30-45%。

权限服务是一个后端服务,在各种情况下用于评估用户和租户,决定他们是否可以显示存在、添加用户、开始聊天或创建会议,这需要严格的性能要求。 .NET 6. 在迁移到.NET 6之前,它是建立在Azure的经典云服务上,采用.NET Framework 4.7.2,API是OWIN/Katana。

迁移过程、执行情况(人数和持续时间以及ServicePointManager淘汰带来的迁移泄漏问题)、在推广过程中看到的(在处理大量流量后,.NET 6版本的性能更好,似乎比现有版本的利用率更高)、好处(延时 改进)。

Visual Studio 2022 版本 17.5.1 | Visual Studio 2022 发行说明 | Microsoft Learn

https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-notes#17.5.1

Visual Studio 2022的17.5.1版已经发布。

该版本解决了17.5(.NET SDK 7.0.200)(.NET SDK 7.0.201)中 "dotnet包 "的--输出选项的问题,以及一些修复问题。

用VisualStudio.Extensibility Preview 3构建更好的扩展!! - Visual Studio博客

https://devblogs.microsoft.com/visualstudio/visualstudio-extensibility-preview-3/

宣布VisualStudio.Extensibility预览版3,Visual Studio的新扩展API/SDK。

在这个预览版中,以下功能现在可用/已实现

  • 调试器可视化器
  • 自定义对话框
  • 查询项目系统
  • 编辑器边缘扩展
  • 配置扩展
    • 从指定属性的模型到指定类型的属性

加入我们的Hack Together: Microsoft Graph and .NET - .NET博客

https://devblogs.microsoft.com/dotnet/hack-together-microsoft-graph-dotnet/

宣布举办虚拟黑客马拉松(活动),您可以在3月1日至15日期间通过使用微软图形和.NET创建应用程序来赢得奖品。

从3月1日至3月15日,通过提交使用微软图形和.NET的应用程序,有机会获得Xbox等奖品。

发布Plotly.NET v4.0.0 - plotly/Plotly.NET

https://github.com/plotly/Plotly.NET/releases/tag/4.0.0

Plotly.NET v4.0.0已经发布。

这个版本是在改进了可传递给某些图表的数据和改变了plotly.js之后发布的。

文章、幻灯片

"Pico Chess, start a new game": .NET语音识别教程

https://dev.to/picovoice/pico-chess-start-a-new-game-net-speech-recognition-tutorial-2jj1

来自Picovoice的.NET SDK与基于文本的国际象棋引擎ChessCore相结合,实现语音控制。

7个用于与Web3互动的.NET工具

https://medium.com/c-sharp-progarmming/7-net-tools-for-interacting-with-web3-96a921c86a21

介绍了七个区块链库(Nethereum、CardanoSharp、BlockM3、Neo、Stratis、Blockfrost.io、Nethermind),可用于.NET中。

ML.NET模型生成器中的句子相似性 - .NET博客

https://devblogs.microsoft.com/dotnet/sentence-similarity-mlnet-model-builder/

关于在ML.NET Model Builder中处理句子相似性的能力。

用过滤器定制RequestDelegate:最小的API的幕后 - 第八部分

https://andrewlock.net/behind-the-scenes-of-minimal-apis-8-customising-the-request-delegate-with-filters/

解释了如何在ASP.NET Core中的Minimal APIs幕后处理带有过滤器的自定义RequestDelegate。

Entity Framework中的数据加载

https://dev.to/grontis/data-loading-in-entity-framework-2foe

如何使用Microsoft.EntityFrameworkCore.Proxies在Entify Framework Core中进行懒惰加载。

在Ubuntu上用GTK做GNOME窗口中的Hello World - Qiita

https://qiita.com/hiroxpepe/items/bc4caa6b6c77f5ddf89a

在Linux上用.NET 6和GtkSharp(GTK)来显示窗口。

添加文件和文件夹的最快方法 - Visual Studio博客

https://devblogs.microsoft.com/visualstudio/the-fastest-way-to-add-files-and-folders/

介绍Visual Studio 2022年版本17.5中引入的新的添加文件对话框。

介绍Visual Studio中的F#内联类型和参数名称提示 - .NET博客

https://devblogs.microsoft.com/dotnet/fsharp-inline-hints-visual-studio/

关于Visual Studio中对F#类型和参数名称的内联提示的支持。

它目前是作为一个预览功能提供的,必须在配置中启用才能使用它。

使用dotnet trace测量.NET应用程序使用CPU时间的位置 | @jsakamoto

https://devadjust.exblog.jp/29509340/

如何使用dotnet-trace对.NET应用程序的CPU时间进行分析。

当你想在C#中使用两个int作为Dictionary键时的性能比较(键的范围是[-32768, 32767])。

https://zenn.dev/zubu/articles/f594afaa3b6051

关于用两个ints获得的哈希码的Dictionary的性能及其碰撞率,比较了使用ValueTuple和HashCode等方法。

[C#] 使用Math.NET数字技术的简单线性回归分析(SLR:简单线性回归) - Qiita

https://qiita.com/MonaiTakeshi/items/e36c6fc232230699ff03

如何用Math.NET Numerics进行简单线性回归分析。

[C#] 用Math.NET Numerics进行多元线性回归分析(MLR:多元线性回归) - Qiita

https://qiita.com/MonaiTakeshi/items/df0ce261a2ffcde71495

如何使用Math.NET Numerics进行多元线性回归分析。

原始字符串、UTF-8字符串和多行插值 - 在Rider和ReSharper中使用C# 11 | .NET工具博客

https://blog.jetbrains.com/dotnet/2023/02/27/raw-strings-utf-8-strings-multiline-interpolations-using-csharp-11-in-rider-and- resharper/

介绍C# 11中的原始字符串和UTF-8字符串,多行字符串补全及其在Rider和ReSharper中的支持。

C# "var" with a reference Type is Always Nullable

https://jeremybytes.blogspot.com/2023/02/c-var-with-reference-types-is-always.html

关于在C#中用var定义的变量被视为空允许的参考类型。

在BlazorServer中与所有页面共享一个客户的IP地址 - Qiita

https://qiita.com/takaOG/items/375d67397ddc3dc77fc9

关于如何在Blazor服务器中获得一个客户的IP地址,并在页面之间共享。

我在.NET中设置了一个gRPC服务器。

https://zenn.dev/au/books/7cec3e306916a5

在.NET中实现一个gRPC服务器,并做一些诸如写入数据库和实现拦截器的事情,这是一个分步指南。

我试着接触了OpenTelemetry dotnet。

https://zenn.dev/k_maru/articles/first_opentelemetry_dotnet

如何用OpenTelemetry获取和显示ASP.NET Core应用程序的痕迹。

还介绍了调用外部服务和用Zipkin显示等方法。

Blazor中的NavigationManager - Kristoffer Strube的博客

https://kristoffer-strube.dk/post/the-blazor-navigationmanager/

Blazor NavigationManager类的解析。

在.NET 7中,新的RegisterLocationChangingHandler API。

为NuGet包写一个高质量的README - The NuGet Blog

https://devblogs.microsoft.com/nuget/write-a-high-quality-readme-for-nuget-packages/

为NuGet包写一个高质量的README指南。

它介绍了在README中应该写些什么、模板、良好的做法等,由于README现在可以在NuGet.org上显示,这些都变得越来越重要。

关于委托

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

关于从C语言向C#传递委托并在NativeAOT中调用它们。

用MemoryPack在Math.NET中序列化向量 - Qiita

https://qiita.com/delicioustuna/items/6cd457bbfb40254663d2

关于Formatter用MemoryPack将Math.NET的Vector<T>序列化的实现。

GitHub Copilot in Visual Studio 2022 - Visual Studio Blog

https://devblogs.microsoft.com/visualstudio/github-copilot-in-visual-studio-2022/

介绍Visual Studio 2022中GitHub Copilot更新的视频。

用TDD构建的Roslyn Analyser [DeNA TechCon 2023].

https://speakerdeck.com/dena_tech/techcon2023-session03

解释如何使用Dena.CodeAnalysis.Testing进行开发的会议幻灯片,它可以协助为Roslyn Analyzer单元测试编写测试代码。

利用动态程序分析优化EF Core数据库查询 | .NET工具博客

https://blog.jetbrains.com/dotnet/2023/03/02/optimizing-entity-framework-core-database-queries-with-dynamic-program-analysis/

了解如何使用动态程序分析(DPA)来优化Entity Framework Core数据库查询,它可以自动分析ReSharper和Rider应用程序的性能。

库、存储库、工具等。

Cysharp/csbindgen: 从Rust生成C# FFI,用于自动将本地代码和C本地库带到.NET和Unity。

https://github.com/Cysharp/csbindgen

一个Rust库,可以生成绑定,将本地C库带到.NET和Unity。

网站、文件等

推文

Stack Overflow技术架构的解释。

https://twitter.com/sahnlam/status/1629713954225405952?s=12

image-20230304150146405


Visual Studio 2022 17.5版能够像Visual Studio Code那样从.http文件中创建REST客户端。

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

image-20230304150329002


Immutable和Frozen的区别。

https://twitter.com/dave_dotnet/status/1629464212194959362?s=12

image-20230304150433945

不可变的集合是 "不可变的",因为一个集合的特定实例不能被改变。然而,它们确实鼓励变异:不是变异该实例,而是从原始实例中创建新的实例。所以你会看到在不可变集合上的添加和删除等方法,这些方法并不改变原始实例,而是创建一个包含该突变的新实例(你经常会在文献中看到此类集合被描述为 "持久化集合")。这样做的净结果是,除了有一个鼓励这种操作的表面区域外,还为这种使用优化了实现,特别是围绕实例之间的内存共享。如果你有一个ImmutableDictionary<string, string>,从表面上看它是一个树形数据结构,当你对它进行 "添加 "时,它会创建一个新的ImmutableDictionary<string, string>,它尽可能多地共享原始树,但要有支持添加项目所需的额外节点。这意味着即使ImmutableDictionary<>是 "不可变的",它实际上并没有为快速读取进行优化,例如,TryGetValue是一个O(log n)操作。

另一方面,新的FrozenSet<>/FrozenDictionary<>是真正的不可变的;没有任何API表面区域允许或鼓励添加、删除等。因此,它们是为你能对它们进行的唯一操作而设计的:读取。如果你所关心的是没有任何能够实现任何形式的突变的API,那么你可以只使用ToFrozenSet/Dictionary。如果你打算让这些东西存在一段时间,并想在构造时花更多的时间把数据放入一种形式,使它们在随后的所有读取中更快,你可以给这些方法传递一个optimizeForReading:true bool,工厂会花更多的时间计算最好的存储,使随后的操作如TryGetValue非常快。它不需要担心以一种能使创建派生集合的成本降低的方式来存储数据,因为没有执行这种操作的表面区域。

深入探索

wpf/roadmap.md at main · dotnet/wpf · GitHub

https://github.com/dotnet/wpf/blob/main/roadmap.md

2023年的WPF路线图,包括对Windows 11支持。

版权声明

由于笔者没有那么多时间对国内的一些文章进行整理,欢迎大家为《.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,欢迎大家加入。

与.NET周报 【3月第1期 2023-03-03】相似的内容:

.NET周报 【3月第1期 2023-03-03】

国内文章 我做的FFmpeg开源C#封装库Sdcb.FFmpeg https://www.cnblogs.com/sdflysha/archive/2023/02/27/dotnet-conf-china-2022-ffmpeg.html FFmpeg是知名的音频视频处理软件,我平时工作生活中会经常

.NET周报 【3月第2期 2023-03-12】

国内文章 ASP.NET Core中如何限制响应发送速率(不是调用频率) https://www.cnblogs.com/coredx/p/17195492.html ASP.NET Core中有很多RateLimit组件,.NET 7甚至推出了官方版本。不过这些组件的主要目标是限制客户端访问服务的

.NET周报 【3月第3期 2023-03-19】

国内文章 记一次 .NET某汽车零件采集系统 卡死分析 https://www.cnblogs.com/huangxincheng/p/17214154.html 前段时间有位朋友在微信上找到我,说他的程序会出现一些偶发卡死的情况,让我帮忙看下是怎么回事,刚好朋友也抓到了dump,就让朋友把 dum

.NET周报 【3月第4期 2023-03-24】

国内文章 .NET应用系统的国际化-多语言翻译服务 https://www.cnblogs.com/tianqing/p/17232559.html 本文重点介绍了多语言翻译服务的设计和实现。文章描述了如何通过多语言翻译服务,将临时存储在数据库中的多语言词条,按支持的语言翻译成多语言词条。作者设计了

.NET周报 【4月第1期 2023-04-02】

国内文章 探索 SK 示例 -- GitHub 存储库中的机器人 https://www.cnblogs.com/shanyou/p/17280627.html 微软 3月22日 一篇文章“Semantic-kernel 嵌入和记忆:使用聊天UI探索GitHub Repos”[1] ,文章中进行了展

.NET周报【1月第3期 2023-01-20】

这应该是2023年农历新年前的最后一篇.NET周报,再次预祝大家新年快乐! 国内文章 看我是如何用C#编写一个小于8KB的贪吃蛇游戏的 https://www.cnblogs.com/InCerry/p/building-a-self-contained-game-in-c-under-8-kilo

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

国内文章 2023 年.NET仓库社区年度调查已经开始 https://mp.weixin.qq.com/s/H9xUAO_yAdqm5CIHBs_eqA 中国地区是 .NET 的一个重要的市场和社区,有着众多的 .NET 开发者和爱好者。中国地区也有着很多优秀的 .NET 相关的项目和资源。这些项

.NET周报 【4月第3期 2023-04-15】

国内文章 Semantic Kernel 入门系列:📅 Planner 规划器 https://www.cnblogs.com/xbotter/p/semantic_kernel_introduction_planner.html 本文介绍了Semantic Kernel的一个核心能力,即实现目标

.NET周报 【5月第3期 2023-05-21】

## 国内文章 ### C# 实现 Linux 视频会议(源码,支持信创环境,银河麒麟,统信UOS) https://www.cnblogs.com/shawshank/p/17390248.html 信创是现阶段国家发展的重要战略之一,面对这一趋势,所有的软件应用只有支持信创国产化的基础软硬件设施

.NET周报 【6月第3期 2023-06-18】

## 国内文章 ### 揭秘 Task.Wait https://www.cnblogs.com/eventhorizon/p/17481757.html Task.Wait 是 Task 的一个实例方法,用于等待 Task 完成,如果 Task 未完成,会阻塞当前线程。**非必要情况下,不建议使用