.NET周刊【5月第1期 2024-05-05】

国内文章

一个开源轻量级的C#代码格式化工具(支持VS和VS Code)

https://www.cnblogs.com/Can-daydayup/p/18164905

CSharpier是一个开源、免费的C#代码格式化工具,特点是轻量级且依赖Roslyn引擎重构代码格式。支持的IDE包括Visual Studio (2019与2022) 和 Visual Studio Code等。该项目在GitHub上托管,并被集成到C#/.NET/.NET Core优秀项目框架精选列表中。DotNetGuide技术社区也推荐使用CSharpier,并为.NET开发者提供交流与学习的平台。

.NET开源、功能强大、跨平台的图表库 - LiveCharts2

https://www.cnblogs.com/Can-daydayup/p/18166862

LiveCharts2是一款.NET开源图表、地图和仪表库,特点是功能强大、简单、灵活且跨平台,支持多种平台如Maui、Uno Platform等。提供在线API文档,并可以通过NuGet安装。为预发行版本,教程举例说明了如何在Blazor Wasm中创建基础柱状图和包含延迟动画的图表。

【YoloDeployCsharp】基于.NET Framework的YOLO深度学习模型部署测试平台

https://www.cnblogs.com/guojin-blogs/p/18172502

该项目是一个基于.NET Framework 4.8开发的深度学习模型部署测试平台,支持YOLO系列模型(YOLOv8至YOLOv9)的图像和视频检测。模型部署采用OpenVINO™、TensorRT、ONNX runtime和OpenCV DNN引擎,在多种设备上提供推理功能。项目自行开发了OpenVINO™和TensorRT的C#接口,并在GitHub上提供源码。支持的模型包括从YOLOv5到YOLOv9以及YOLO World,通过不同的部署工具进行了算力测试。测试结果显示,在GPU上TensorRT具有较好的推理速度,而在CPU上OpenVINO表现出色。项目源码已开源于GitHub,同时提供了相关的搭建和使用教程。

Windows下绑定线程到指定的CPU核心

https://www.cnblogs.com/czwy/p/18166365

Windows操作系统提供了SetThreadAffinityMask和SetProcessAffinityMask两个Win32函数,用于将线程或进程绑定到指定的CPU逻辑核心上,以提高执行效率。这两个函数通过设置处理器关联掩码实现绑定,对于超过64核心的CPU需要使用SetThreadGroupAffinity。通过示例代码可以实现绑定线程到特定CPU核心并监测执行时间。这种技术可以帮助提升性能,减少缓存未命中,并且对实时系统和并发控制非常有用。但需要注意的是,如果所绑定的CPU核心已有高负荷,则可能导致性能降低。

您可知道如何通过HTTP2实现TCP的内网穿透???

https://www.cnblogs.com/hejiale010426/p/18166935

由于服务器内部网站无法直接访问外网,需要通过申请特定端口才能访问外部IP和端口,这一过程耗时且繁琐。因此,开发了利用现有Http网关端口进行TCP服务转发的Taibai项目,这样可以避免频繁的端口申请和审批。项目中创建了Taibai.Core核心类库,其中的DelegatingStream类继承自Stream,并包装了一个内部流对象,重载了基类的读写和定位等方法,以实现特定的流操作功能。

.NET Emit 入门教程:第七部分:实战项目1:将 DbDataReader 转实体

https://www.cnblogs.com/cyq1162/p/18149511

通过.NET Emit中间语言编程可以提高程序性能。ORM实现分为三个阶段:初级阶段利用代码生成器生成基础增删改查代码,效率高但可维护性低;中级阶段使用反射来替代生成器,运行效率低但开发和可绑定性得提高,可通过缓存优化;高级阶段示例通过Emit和ADO.NET读取数据库数据到实体类,兼顾运行效率和可维护性。CYQ.Data的代码示例展示了如何使用Emit将DbDataReader转换到实体对象。

让.NET 8 支持 Windows Vista RTM

https://www.cnblogs.com/shanyou/p/18173208

Windows系统每次更新会增加许多API,导致新开源项目往往不再支持早期版本的Windows。.NET 8 AOT编译生成的程序需要Windows 7 SP1以上版本支持的三个函数,YY-Thunks项目通过动态加载和模拟API行为,解决了在旧版本Windows系统上运行程序的问题。该项目支持多种编译器和运行库,易于通过NuGet集成,最新版v1.0.10-Beta3支持了.NET 8的Native AOT。为确保项目兼容性,开发者应查阅YY-Thunks官方文档或源码。

C#开源的两款功能强大的录屏神器

https://www.cnblogs.com/Can-daydayup/p/18170962

ScreenToGif是由C#开发的开源屏幕录制及GIF制作工具,ShareX是基于.NET的截图、录屏软件。这两款软件均被收录在C#/.NET/.NET Core优秀项目和框架精选中,该精选旨在分享C#、.NET领域的最新动态和最佳实践。DotNetGuide技术社区提供.NET相关学习资料、技术分享、项目框架推荐等,支持开发者交流和成长。

推荐3款程序员常用的画图工具

https://www.cnblogs.com/Can-daydayup/p/18169082

大姚在DotNetGuide技术社区微信群中推荐了三款程序员常用的画图工具。ProcessOn是一款支持多种图形和实时协作的在线作图工具,虽然免费版有文件数量限制,它提供了AI生成思维导图流程图等功能。Excalidraw是一款开源的虚拟协作白板,可以手绘风格绘制图表。Draw.io是一款无需注册、完全免费的在线绘图工具,适合创建多种类型的图表。这三款工具都被整理到程序员常用工具软件栏目中,供开发者选择。

.NET CORE 完美支持AOT 的 ORM SqlSugar 教程

https://www.cnblogs.com/sunkaixuan/p/18170061

AOT适合于工具类项目且具有启动快、禁止反编译等优点,但不适宜于反射多的业务项目。SqlSugar的AOT版本经过实践反复迭代,已支持包括CodeFirst和异步方法,并且在生产中投入使用。支持的数据库有SqlServer(需要特定配置)、MySql、Sqlite和PostgreSQL,Oracle不支持。提供了AOT下的Hello World教程和SqlSugar的简单配置,但AOT存在功能限制,不适合大型项目,只有.NET基础API支持,不支持.NET MVC。

.Net 8.0 下的新RPC,IceRPC之试试的新玩法"打洞"

https://www.cnblogs.com/xlgwr/p/18169319

IceRPC技术使得防火墙无法阻碍客户端与服务端之间的通信,通过新玩法“打洞”,实现了客户端到服务端的通信模式的翻转。文章详述了IceRPC的调用机制,包括调用器invoker的获取与使用,以及如何在服务端推送通知至客户端。作者还演示了如何通过Slice接口实现服务器向客户端发送异常温度警报的推送通知功能。

自动化测试数据生成:Asp.Net Core单元测试利器AutoFixture详解

https://www.cnblogs.com/ruipeng/p/18163423

AutoFixture是一个开源的.NET库,用于简化单元测试中的安排阶段,并帮助自动生成测试数据。与Bogus相比,AutoFixture的优势在于其可以自动适应类的变化,减少维护成本。AutoFixture支持与NUnit和xUnit等.NET测试框架无缝集成,并且通过Create和CreateMany方法,可以便捷地生成各种类型的测试数据实例。

如何基于surging跨网关跨语言进行缓存降级

https://www.cnblogs.com/fanliang11/p/18173704

Surging是一个开源的微服务引擎,支持rpc服务治理和中间件,能够解决多语言协同研发中的配置统一和数据缓存问题。文章介绍了如何创建和使用拦截器,特别是缓存拦截器,和如何设置缓存键。还提供了如何在多语言调用中应用缓存拦截以及创建拦截模块的方法。文章解释了Surging的两种服务调用方式:接口代理调用和基于routepath调用,在基于接口的场景中,支持复杂类型参数的缓存拦截。

Blazor流程编排的艺术:深入Z.Blazor.Diagrams库的使用与实践

https://www.cnblogs.com/xuzeyu/p/18173547

在.NET生态中,Blazor是一个逐渐受到欢迎的前端框架。Z.Blazor.Diagrams库基于Blazor开发,可以高度自定义和扩展,帮助开发者实现流程编排。文章提到库受React图库启发,通过文档和示例帮助开发者快速理解其使用。作者介绍了如何在Blazor应用中引入ZBD,创建流程图,并自定义节点交互。

Asp-Net-Core开发笔记:进一步实现非侵入性审计日志功能

https://www.cnblogs.com/deali/p/18165737

该技术文章介绍了ASP.NET Core中通过应用AOP(面向切面编程)来实现动态审计日志功能的高级用法。作者对原有代码进行了重构,创建了新目录结构,并设计了EntityChangeInfo实体来保存实体变化。同时,对AuditLog对象进行了改进,使之包含更详细的操作日志信息。此外,文章还涉及了过滤器(AuditLogAttribute)的简化改进,省略了部分参数,增加了自动获取功能。

.Net 8.0 下的新RPC,IceRPC之使用Dev Containers进行 .NET QUIC 精简开发

https://www.cnblogs.com/xlgwr/p/18171004

本文是关于如何使用Dev Containers进行.NET的QUIC协议开发的指导文章。QUIC是一个注重性能和安全的传输协议,适合远程过程调用(RPCs)。但.NET对于QUIC的跨平台支持有限,因此通过使用Dev Containers可以解决这个问题,创建一个可移植、一致的开发环境。文章步骤详细,提供了创建和配置开发容器的详细指引。先决条件包括安装Docker和Visual Studio Code,并通过VS Code的Dev Containers扩展来构建开发容器。最后本文还展示了如何在容器中运行一个简单的QUIC服务器和客户端,以及生成服务器和客户端代码的命令。

.Net 8.0 下的新RPC,IceRPC之如何创建连接connection

https://www.cnblogs.com/xlgwr/p/18173254

IceRPC支持创建连接,连接是其核心功能,负责发送请求和接收响应。C#中可通过ClientConnection类或ConnectionCache类创建客户端连接,操作简便且可异步连接。服务端通过Server类实例接收连接,并可监听配置的地址上的新连接。连接既支持客户端也支持服务端,且无区别使用同一API。作者强调实践重要性,建议持续练习以提升技能,并欢迎交流。

.Net 8.0 下的新RPC,IceRPC之"请求"生命线意义非凡

https://www.cnblogs.com/xlgwr/p/18170054

本文讨论了在RPC(远程过程调用)系统中加入请求截止时间的重要性,以及不设截止时间可能给分布式系统带来的负面影响。文章解释了超时与截止时间的区别,并强调了在实现强健的分布式系统时,设置适当的截止时间的意义。基于截止时间的机制可以通过拦截器和中间件以灵活的方式在IceRPC中实现,提升了性能和可靠性。

Unity 热更--AssetBundle学习笔记 1.0【AB包资源加载工具类的实现】

https://www.cnblogs.com/TonyCode/p/18170759

这篇文章主要介绍了如何封装工具类来管理AssetBundle资源的加载。首先实现了一个确保AB资源包只加载一次的LoadAssetBundleManager单例类,采用Dictionary来记录加载的资源。文章还讲解了如何灵活获取主包路径、加载依赖包以及实现异步和同步加载资源的方法。最后,提供了卸载单个及所有AB资源包的功能。

C#的基于.net framework的Dll模块编程(五) - 编程手把手系列文章

https://www.cnblogs.com/lzhdim/p/18148913

本文介绍了在C#环境中使用DLL类库的三种方法:静态类、动态类和窗体,只需要引用类库并声明命名空间即可使用。同时也阐述了如何使用其他C# DLL库,方法与前述相同。针对VC++的DLL,需声明函数定义后方可使用,并给出了调用Windows API函数的例子。提供了示例下载链接。

主题

宣布推出第一个真正适用于移动、Web、桌面和嵌入式应用程序的 .NET 单一项目

https://platform.uno/blog/the-first-and-only-true-single-project-for-mobile-web-desktop-and-embedded-in-net/

Uno平台5.2已发布。

此版本包括对 Skia 渲染器的增强,以实现更好的性能、多窗口支持、对 Uno SDK 的改进、对 .NET 9 预览版的支持等。

此外,项目模板已更新,因此单个项目现在可以支持所有平台。

版本 2.3.7 · mysql-net/MySqlConnector

https://github.com/mysql-net/MySqlConnector/releases/tag/2.3.7

MySqlConnector 2.3.7 已发布。

此版本修复了多个错误。

.NET Aspire 预览版 6 - .NET Aspire

https://learn.microsoft.com/en-us/dotnet/aspire/whats-new/preview-6

.NET Aspire 预览版 6 已发布。

此版本包括删除和修改过时的 API、Aspire 仪表板的令牌身份验证、对 Qdrant 矢量数据库的支持以及其他细微更改。

介绍 Elastic 的 OpenTelemetry SDK for .NET

https://www.elastic.co/jp/blog/elastic-opentelemetry-distribution-dotnet-applications

Elastic .NET OpenTelemetry SDK 的 Alpha 版本现已推出。

Elastic OpenTelemetry 发行版包括 Elastic 的 OpenTelemetry 的默认配置以及使用 OpenTelemetry SDK 的扩展。当前的 alpha 版本与普通版本几乎没有区别,但计划在未来添加更多功能。

使用 .NET 为 Microsoft AI 构建可扩展网关 - .NET 博客

https://devblogs.microsoft.com/dotnet/building-a-scalable-gateway-for-microsoft-ai/

使用 .NET 和 YARP 为 Microsoft 的 Bing 和 Copilot 等 AI 服务构建前端网关的案例研究。

本文介绍了利用 YARP 灵活配置(例如镜像、速率限制和动态配置更改)的示例。

发布 v8.1.0 · dotnet/orleans

https://github.com/dotnet/orleans/releases/tag/v8.1.0

Orleans v8.1.0 已发布。

此版本支持与 Aspire 集成,并包含各种修复和改进。

文章、幻灯片等

在 C# 中使用异步检测阻塞调用 | James Crosswell | 代码博客

https://www.jamescrosswell.dev/posts/async-detecting-blocking-calls

如何调查异步方法中的阻塞调用。

文章介绍了使用Ben.BlockingDetector进行检测,并将其合并到Sentry中,以便可以在Sentry上进行确认。

.NET 正则表达式 - 捕获

https://zenn.dev/sayurin/articles/76f6739d7ac75f

关于在 .NET 正则表达式中进行捕获。

当有多个命名捕获时该怎么办,如何在 F# 中自然地处理命名捕获等。

使用主构造函数重构 C# 代码 - .NET 博客

https://devblogs.microsoft.com/dotnet/csharp-primary-constructors-refactoring/

关于使用主构造函数进行重构。

本文介绍了一个示例,将构造函数中传递 ILogger 等内容的模式替换为主构造函数。

组装 .NET 的 AsciiMath 解析器

https://andrewlock.net/hacking-together-an-asciimath-parser-for-dotnet/

如何使用 .NET 中的 AsciiMath 解析器。

本文介绍了多种语言的 AsciiMath 解析器,并解释了如何最终使用 Jint 让 JavaScript 实现可从 .NET 运行。

配置 ASP.NET Core Minimal API 以进行生产和大规模使用 - Qiita

https://qiita.com/takashiuesaka/items/654c6e0d0bb7c92854a8

介绍使用 ASP.NET Core Minimal API 定义和实现 API 时组织代码的技术(翻译)。使用扩展方法进行聚合、使用MapGroup进行分组等。

如何在 OpenTelemetry 中的两个跨度之间创建链接

https://dev.to/koma_koma_d/how-to-create-a-link-between-two-spans-in-opentelemetry-424i

关于如何创建连接 OpenTelemetry 跨度的跨度链接。

[JWT] 如何解决解码过程中出现的 Unable to demo the payload 错误

https://zenn.dev/o0rororo0o/articles/028202490cc99d

对于 Microsoft.AspNetCore.Authentication.JwtBearer 7.0.14 或更高版本,如果 JWT iat 字段为非数字,则会发生错误。

使用 SearchValues 优化 C# 中的字符串搜索

https://dev.to/admirmujkic/optimizing-string-searches-in-c-with-searchvalues-1105

关于“SearchValues”类的用法和性能,该类是在.NET 8中添加的,可以专门定义用于搜索特定值。

ReSharper 和 Rider 2024.1 的第一组错误修复已发布 | .NET 工具博客

https://blog.jetbrains.com/dotnet/2024/04/17/the-first-set-of-bug-fixes-for-resharper-and-rider-2024-1-are-here/

ReSharper 和 Rider 2024.1.1 已发布。

此版本是 ReSharper 和 Rider 2024.1 的第一个错误修复,修复了一些小缺陷。

itsmattkc/dotnet9x:.NET 2.0 - 3.5 向后移植到 Windows 9x

https://github.com/itsmattkc/dotnet9x

尝试将 .NET Framework 2.0-3.5 向后移植到 Windows 9x 的项目。

-[Yajiuma PC Watch]将.NET Framework反向移植到Windows 95的强者出现了

Visual Studio 会迁移到 .NET Core 并成为多平台吗? - NDepend 博客

https://blog.ndepend.com/visual-studio-multi-platform/

为了考虑 Visual Studio 是否会转换为 .NET CoreCLR,我们正在对 Visual Studio 当前的程序集结构进行调查和假设。

活动

C#性能学习会(2024/04/27 13:30~)

https://cs-reading.connpass.com/event/309714/

现代 C# .NET Web 开发 ~ gRPC、GraphQL、Blazor 也可用 ~ (2024/05/15 19:00~)

https://sansan.connpass.com/event/316664/

库、存储库、工具等。

Cysharp/KcpTransport:KcpTransport 是 RUDP 的纯 C# 实现,用于高性能实时网络通信

https://github.com/Cysharp/KcpTransport

KCP 的 .NET 移植实现(基于 UDP 的 RUDP 类协议)。

网站、文档等

推文

当一个局部函数被编译成IL时,它就变成了一个名称以“g_”开头的方法,但是关于“g_”。

https://x.com/khyperia/status/1782787967703998667?s=12

IList<T> 可能会变成 IReadOnlyList<T> 的故事。

https://x.com/terrajobst/status/1782922704997498982?s=12

深入探索

List Add 在 net9.0 Preview 3 中比在 net8.0 中慢得多(几乎是 3 倍) · Issue #101437 · dotnet/runtime

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

关于 .NET 9 List 由于 JIT 更改而可能变慢的问题。目前,这种情况仅发生在 Apple Silicon (Arm64) 上。

https://x.com/davidfowl/status/1782961890580414894?s=12

版权声明

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

image-20230703203249615

posted @ 2024-05-13 22:03  InCerry  阅读(747)  评论(0编辑  收藏  举报