.NET周刊【8月第4期 2023-08-27】
国内文章
AgileConfig-1.7.0 发布,支持 SSO 🎉🎉🎉
https://www.cnblogs.com/kklldog/p/agileconfig-170.html
AgileConfig 已经好久好久没有更新过比较大的功能了。一是 AgileConfig 本身的定位就是比较轻量,不想集成太多的功能。二是比较忙(懒)。但是本次升级给大家带来了一个比较有用的功能 SSO。
使用 OpenTelemetry 构建 .NET 应用可观测性(1):什么是可观测性
https://www.cnblogs.com/eventhorizon/p/17660272.html
- 什么是系统的可观测性(Observability)
- 为什么软件系统需要可观测性
- 可观测性的三大支柱
- 日志(Logging)
- 指标(Metrics)
- 分布式追踪(Distributed Tracing)
- Unknow Unknows VS Known Unknowns
- 数据的关联 - 实现可观测性的关键
- 总结
Windows 虚拟地址 到底是如何映射到 物理地址 的?
https://www.cnblogs.com/huangxincheng/p/17656346.html
我发现有很多的 .NET程序员 写了很多年的代码都没弄清楚什么是 虚拟地址
,更不用谈什么是 物理地址
以及Windows是如何实现地址映射的了?这一篇我们就来聊一聊这两者之间的联系。
C#是否应该限制链式重载的设计模式?
https://www.cnblogs.com/sunkaixuan/p/17655870.html
链式重载是我自己创造的一个词,意思是方法A里处理一下参数,return另一个方法A,第二个方法A里处理一下参数调第三个方法A,就这样无限循环下去直到调到真正能出结果的方法A。
本人学艺不精,偶然进行C#开发,感觉看代码要吐。比如看到某处调用方法A,除非有某个特征显眼的参数,否则根本不知道调的方法A是哪个,而且代码里也不是按照链的顺序写的。
一个超经典 WinForm 卡死问题的最后一次反思
https://www.cnblogs.com/huangxincheng/p/17654394.html
在我分析的 200+ dump 中,同样会遵循着 28原则,总有那些经典问题总是反复的出现,有很多的朋友就是看了这篇 一个超经典 WinForm 卡死问题的再反思 找到我,说 WinDbg 拦截 System_Windows_Forms_ni System.Windows.Forms.Application+MarshalingControl..ctor
总会有各种各样的问题,而且 windbg 也具有强侵入性,它的附加进程方式让很多朋友望而生畏!
这一篇我们再做一次反思,就是如何不通过 WinDbg 找到那个 非主线程创建的控件,那到底用什么工具的? 对,就是用 Perfview 的墙钟模式。
MAUI+Blazor混合应用开发示例
https://www.cnblogs.com/fengjq/p/17647612.html
笔者之前在公司搭建过一套生产管理系统,该系统要求能和硬件进行串口通信,同时又要方便后台进行信息查询。笔者给出的解决方案就是:MAUI + Blazor,这样只需要提供一套UI,就能满足桌面端、移动端和Web端三种不同应用场景。今天要介绍的是基于桌面端的开发实现(实际上WPF和Winform皆可行)。
某酒管集团-单例模式对性能的影响及思考
https://www.cnblogs.com/yxdeng/p/17636047.html
大概一年前开始在思考 构造函数中 依赖注入较多,这对系统性能及硬件资源消耗产生一些优化想法。 一般较多公司的项目都使用Autofac 依赖注入(Scoped 作用域),但是发现过多的对象产生 会消耗 CPU , 内存 并给GC(垃圾回收)造成一定的压力。那么开始思考是否能够使用 单例 (Singleton)来解决这些问题呢? 带着这些想法开始ReView整个项目的代码,排查是否存在 单例 会造成 线程安全 或 方法内修改全局变量的代码( 结果是乐观的.... )。于是开始了性能测试....论证.. 试运行... ,结果是超预期的(CPU 从 60%-降低到--》10%, 内存 从 33%-降低到--》20%, 接口平均响应时间 从 120毫秒--降低到--》50毫秒 . 1500/QPS (不含内部服务相互调用)) 和 @InCerry 沟通结果,说可以写个 案例 和大家分享分享... 于是乎 有了这一片文章。
CTC蜀道会:第一次圆桌会圆满结束
https://www.cnblogs.com/edisonchou/p/ctc_offline_activity_2023no1_introduction.html
近期,成都.NET俱乐部核心成员经过讨论会,我们成立了CTC蜀道会,它是一个专注于创业历程、研发管理、AIGC、副业之路、.NET、Vue、微软技术、开源技术等领域的社区,立足于蓉城成都,致力于连接同道中人,共同破圈成长。
Blazor前后端框架Known-V1.2.13
https://www.cnblogs.com/known/p/17645480.html
Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行。
- Gitee: https://gitee.com/known/Known
- Github:https://github.com/known/Known
主题
【英文】发布版本 v2.56.0 grpc/grpc-dotnet
https://github.com/grpc/grpc-dotnet/releases/tag/v2.56.0
grpc-dotnet v2.56.0 已发布。
它包括对 DebuggerDisplay 等调试体验的改进,以及细微的改进和错误修复。
【英文】Windows 社区工具包 8.0 预发行版 - #ifdef Windows
https://devblogs.microsoft.com/ifdef-windows/windows-community-toolkit-8-0-pre-release/
Windows Community Toolkit 8.0 预览版已发布。
WCT 8.0 将多个平台集成到一个代码库中,统一命名空间等等。该组件可与 UWP、Windows App SDK 和 Uno 平台配合使用。
本文还介绍了可用的包以及如何在新的/现有的项目中使用它们。
【英文】发布 ImageSharp.Drawing 1.0.0
https://sixlabors.com/posts/announcing-imagesharp-drawing-100/
SixLabors.ImageSharp.Drawing 1.0.0 已发布。
该库基于ImageSharp,提供高级绘图功能,例如文本渲染、路径和形状绘制。在类似 Linux 的环境中可以用作 System.Drawing 的替代方案。
请注意,该库的版本 v1.x 是在 Apache 2.0 许可证下,但它所依赖的 ImageSharp 不是 v2.x(不是开源的)。
【英文】ReSharper 和 Rider 2023.2 的第一组错误修复就在这里! | .NET 工具博客
https://blog.jetbrains.com/dotnet/2023/08/24/2023-2-1-bugfix/
ReSharper 和 Rider 2023.2 已发布。
此版本修复了各种错误,包括冻结和代码解析问题。
【英文】.NET Framework 2023 年 8 月累积更新预览 - .NET 博客
https://devblogs.microsoft.com/dotnet/dotnet-framework-august-2023-cumulative-update-preview/
.NET Framework 2023 年 8 月累积更新的预览版已发布。
此版本修复了 WPF、运行时和 ASP.NET 中的多个错误。
文章、幻灯片等
【英文】内存优化的扭曲故事
讨论从“char[]”创建 UTF-8 字节时优化内存分配的陷阱。
【日文】可以包装 Microsoft.Fast.Components.FluentUI 的 DataGrid 中无法显示的项目
https://zenn.dev/tomokusaba/articles/2468153bfe2d68
关于FluentUI for Blazor的FluentDataGrid组件中在列中指定长字符串时如何避免显示被截断的问题。
【日文】CEDEC 2023 现代高性能 C# 2023 版
https://speakerdeck.com/neuecc/cedec-2023-modanhaipahuomansuc-number-2023-edition
该幻灯片介绍了基于序列化器的实现在现代 .NET 中编写高性能代码的技术。
【日文】使用 AntDesignBlazor 时如何测试组件
https://zenn.dev/artuer/articles/9245d21ac8a88c
如何使用 AntDesignBlazor 对组件进行单元测试。能够使用 BUnit 和 AntDesignTestKit 编写测试。
【日文】制作一个在iOS真机和模拟器上运行MAUI App的脚本的故事 - Qiita
https://qiita.com/t0r/items/1e7a2e8923a8b47a3a12
关于创建 shell 脚本以直接在 iOS 真实版和模拟器上运行 .NET MAUI 应用程序。
【英文】在 Visual Studio 2022 中安全地使用 HTTP 请求中的机密 - Visual Studio 博客
使用 Visual Studio 2022 发送 HTTP 请求 (.http) 的功能时如何存储机密。
除了 httpenv.json 作为环境设置和 httpenv.json.user 作为用户特定设置之外,我们还介绍了从 ASP.NET Core 用户机密和 Azure Key Vault 获取机密信息以及使用 Windows DPAPI 进行加密等方法。是它还引入了 HTTP 文件中额外支持的新语法。
【英文】使用 ForwardedHeadersMiddleware 简化微服务中的标头传播
如何在服务之间传播从客户端接收到的 HTTP 标头。本文介绍如何使用 Microsoft.AspNetCore.HeaderPropagation NuGet 包。
【英文】使用 GitHub Copilot Chat 简化代码优化和调试 - Visual Studio 博客
介绍 Visual Studio 中使用 GitHub Copilot Chat 进行调试和代码改进功能。
本文介绍了分析器中的 CPU 使用情况分析、异常帮助程序以及调试时引用变量和调用堆栈的问题等功能。
【英文】探索 .NET 8 中的 Blazor 变化 - 使用表单捕获用户输入
https://jonhilton.net/blazor-ssr-forms/
在 .NET 8 中的 Blazor (SSR) 中处理表单用户输入的演练。
【英文】如何在 Steam Deck 上安装 JetBrains Rider | .NET 工具博客
https://blog.jetbrains.com/dotnet/2023/08/23/how-to-install-jetbrains-rider-on-steam-deck/
如何在 Steam Deck (SteamOS) 上安装 Rider。
本文介绍了除了 Rider 之外如何安装和运行 .NET 和 Unity。
【英文】.NET 迁移的故事 - 编目
https://www.jimmybogard.com/tales-from-the-net-migration-trenches-catalog/
创建一个目录,列出现有应用程序需要解决的问题,以便从 .NET Framework 迁移到 .NET。
【英文】使用 Serilog 和 Azure 进行 ASP.NET Core 日志记录
https://damienbod.com/2023/08/21/asp-net-core-logging-using-serilog-and-azure/
如何在 ASP.NET Core 中使用 Serilog 将日志发送到 Application Insights 和 Azure 应用服务日志记录服务。
【英文】动态适应应用程序大小
https://maoni0.medium.com/dynamically-adapting-to-application-sizes-2d72fcb6f1ea
讨论称为动态适应应用程序大小 (DATA) 的 GC 功能,该功能将在 .NET 8 中实验性地引入。
【日文】C# Dev Kit for Visual Studio Code 是一个故事,您可以在 GitHub Codespaces 上免费使用它 - Shibayan Miscellaneous
https://blog.shibayan.jp/entry/20230825/1692937805
关于在 Visual Studio Code 上使用扩展的 C# Dev Kit 进行 .NET 开发需要 Visual Studio 许可证,但该许可证包含在 GitHub Codespaces 中。
【日文】尝试将 ASP.NET Core 集成添加到 Azure Functions(.NET 独立工作线程)- Shibayan 其他
https://blog.shibayan.jp/entry/20230823/1692768859
了解 ASP.NET Core 集成现已在 Azure Functions 的 .NET 隔离工作线程中可用。
【英文】Visual Studio 中的新增功能:使用解决方案资源管理器比较文件 - Visual Studio 博客
介绍 Visual Studio 解决方案资源管理器中的文件比较功能。
Enum.TryParse 意外行为
https://steven-giesel.com/blogPost/64d479f1-823f-4fc7-a56a-2b1ff06dcf72
如果 Enum.TryParse 与基本类型匹配,即使该值实际上并未定义,它也会通过有必要检查 IsDefined。
库、存储库、工具等。
wcabus/nes-sharp:用 C# 编写的 NES 模拟器
https://github.com/wcabus/nes-sharp
用 C# 编写的 NES(Famicom)模拟器。
https://x.com/wesleycabus/status/1695072673087263168?s=12
网站、文档等
推文
讨论如何在 appsettings.json 中以与日志相同的方式完成 .NET 8 中与指标相关的设置。
https://x.com/davidfowl/status/1695454305782837561?s=12
对象头是 4 个字节,但在 64 位 .NET 中,出于对齐原因包含 4 个字节的填充是一种浪费。
https://x.com/kookiz/status/1692931201550446891?s=12&t=ggvrrZ7oLogHyNoIGNgjbw
深入理解
通过 janvorli Pull 请求将 NativeAOT 异常处理移植到 CoreCLR #88034 dotnet/runtime
https://github.com/dotnet/runtime/pull/88034
PR 将 NativeAOT 的异常处理机制移植到 CoreCLR。
这可以加快异常处理速度,但目前有一些限制,并且需要环境变量才能启用。此外,由于复杂性,不支持 32 位版本的 Windows。
CoreCLR RISC-V 架构端口问题 #84834 dotnet/runtime GitHub
https://github.com/dotnet/runtime/issues/84834
移植到 RISC-V 架构的问题。
版权声明
- 国内板块由 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,欢迎大家加入。
抽奖送书活动预热!!!
感谢大家对我公众号的支持与陪伴!为庆祝公众号一周年,抽奖送出一些书籍,请大家关注公众号后续推文!