国内文章
起风了,NCC 云原生项目孵化计划
https://www.cnblogs.com/liuhaoyang/p/ncc-the-wind-rises.html
2016 年,我和几位朋友发起了.NET Core 中文学习组和 ASP.NET Core 文档翻译项目,随后创建了.NET Core Community 开源社区,吸引了近 30 个优秀的开源项目加入。然而,随着时间的推移,社区的活跃度逐渐降低。现在,我们计划发起名为"wind rises"的项目孵化,以弥补.NET 平台上缺少云原生基础设施项目的遗憾。我们规划了使用.NET 开发的"可观测性平台"和"分布式应用框架"两个项目。其中,"可观测性平台"已经完成项目原型的开发,计划在年底发布第一个版本。"分布式应用框架"还在原型讨论阶段,初步的想法是提供一个可插拔的应用框架。
.NET 数据库大数据操作方案(插入、更新、删除、查询 、插入或更新)
https://www.cnblogs.com/sunkaixuan/p/17747938.html
本文介绍了 SqlSugar 的各种功能。SqlSugar 是一种 ORM 工具,它优化了实体转换的性能,并使用数据库的最佳 API。它提供了 BulkCopy、BulkUpdate、BulkMerge、BulkQuery、BulkDelete 和 Select INTO 等功能。BulkCopy 用于高效批量插入大量数据到数据库,BulkUpdate 用于高效批量更新数据,BulkMerge 用于大规模数据的插入或更新,BulkQuery 用于高效查询,BulkDelete 用于高效批量删除数据,Select INTO 用于表和表之间的数据导入。此外,SqlSugar 还结合了.NET 中的 SqlBulkCopy 类,提供了更高的性能。通过调整参数、合理使用事务、关闭索引和约束等方式,可以最大限度地提高大数据插入和更新的性能。
.NET Core 使用 SkiaSharp 快速生成二维码( 真正跨平台方案)
https://www.cnblogs.com/Can-daydayup/p/17745369.html
在.NET 6 之前,我们使用 QRCoder 生成二维码,但从.NET 6 开始,非 Windows 操作系统编译引用代码时会发出警告。原因是 System.Drawing.Common 设计为 Windows 技术的简化包装器,跨平台实现不佳。在非 Windows 环境中,官方建议使用 SkiaSharp 和 ImageSharp 等库进行跨平台的图像处理操作。SkiaSharp 是 Mono 团队维护的开源项目,基于 Google 的 Skia 图形库的.NET 跨平台绑定,提供强大的 2D 图形绘制和处理功能,适用于多个平台。使用 SkiaSharp 可以快速生成二维码,无需使用 System.Drawing。
C# 12 中的新增功能
https://www.cnblogs.com/baibaomen-org/p/17748318.html
本文介绍了 C# 12 的新功能,包括主构造函数、集合表达式、默认 Lambda 参数等。主构造函数可以在任何 class 和 struct 中创建,不再局限于 record 类型,可以初始化属性或字段,也可以用于依赖注入和初始化基类。集合表达式引入了新的语法来创建常见的集合值,可以使用展开运算符将其他集合内联到这些值中。默认 Lambda 参数允许为 Lambda 表达式的参数定义默认值,语法和规则与将参数的默认值添加到任何方法或本地函数相同。这些新功能使得代码更灵活、更强大、更可控。
一种对数据库友好的 GUID 的变种使用方法
https://www.cnblogs.com/ensleep/p/17745166.html
本文讨论了如何改造 GUID 以实现有序性,以提高数据库索引效率。GUID 和雪花算法是常见的唯一 ID 生成方案,但 GUID 是无序的,对数据库索引不友好。作者提出了一种新的方法,将时间值和 GUID 结合,生成一个 byte[],前 8 位放时间值,后面放 GUID。在比较大小时,前端的位置优先级更高,所以,后面的 GUID 的无序特性会被覆盖。然后,将其进行类似 Base64 的转换,得到一个长度大概 32 位长度的字符串。这个字符串的字节数至少是 32,但是,其具体更好的可读性。
关于 Async、Await 的一些知识点
https://www.cnblogs.com/tianqing/p/17742818.html
在 ASP.NET Core 中,HTTP 请求到达服务器后,会被分配给线程池中的一个线程处理。如果处理方法是异步的并使用了 await 关键字,那么在 await 的代码执行完之前,该线程会被释放回线程池处理其他请求。当 await 的代码执行完毕后,会再次从线程池获取一个线程继续执行剩余代码。ASP.NET Core 使用中间件管道模型处理请求,不需要使用 SynchronizationContext 来在异步操作完成后将执行上下文切换回原始请求上下文。这种模型提高了性能和可扩展性。SynchronizationContext 和线程上下文是两个不同的概念,前者在多线程环境中控制和协调代码的执行,后者是与特定线程相关的一组数据或状态信息。
【ASP.NET Core】在 Mini-API 中注入服务
https://www.cnblogs.com/tcjiaan/p/17742167.html
本文介绍了 Mini API 的依赖注入功能。首先,定义一个服务类 MyService,然后在容器中注册这个服务。然后,通过参数传入服务类的实例,调用服务类的公共方法。使用 httprepl 工具进行 Web API 测试,可以直接在命令终端输入 httprepl,然后使用 connect 命令建立连接。发起请求时,可以用 get、post、put 等命令,对应 HTTP 的请求方式。最后,添加一个参数 x,调用 API 时,可以直接将 URL 作为命令行参数传给 httprepl 工具。
.NET 周刊【9 月第 4 期 2023-09-24】
https://www.cnblogs.com/InCerry/p/dotnet_week_23_9_4.html
本文介绍了多篇关于.NET 和 C#的技术文章。包括介绍了“可扩展近似计数”算法,使用 C#+Win32Api 实现进程注入到 wechat 的方法,.Net 6 中使用 SkiaSharp 生成验证码的过程,深度比较了几种.NET Excel 导出库的性能差异,四个常用的序列化和反序列化库的性能测试,.NET8 中新增的特性 UnsafeAccessor,C#开源的 Windows 系统优化工具 - Optimizer,.NET 8 的 green thread 异步模型被搁置的情况,以及两次.NET 程序内存暴涨的分析过程。这些文章涵盖了.NET 和 C#的多个重要领域,包括算法、进程注入、验证码生成、Excel 导出库性能比较、序列化和反序列化库性能测试、访问私有成员、系统优化工具、异步模型以及内存分析等。
Asp-Net-Core 开发笔记:快速在已有项目中引入 EFCore
https://www.cnblogs.com/deali/p/17749676.html
本文以 StarBlog 项目为例,介绍了如何在项目中引入 EFCore。首先,安装 EFCore 的 cli 工具,然后在 StarBlog.Data 项目中添加 EFCore 的依赖。接着,创建一个 DbContext,这是 EFCore 与数据库交互的入口。然后,使用 Fluent Config 方式配置数据表和字段。文章还讨论了主键类型的选择,包括自增、GUID、自增+GUID 和 Hi/Lo 等几种方式。最后,创建 DesignTime 配置,让 EFCore 知道如何执行迁移,并使用 migrations 和 database 命令进行数据库迁移。最后,将数据库连接字符串写入配置文件,完成在 AspNetCore 项目中集成 EFCore 的过程。
执行 SQL 语句&存储过程的真正【神器】,不用 ORM 的全选它,比 dapper 好
https://www.cnblogs.com/digital-college/p/17747634.html
本文介绍了一个支持.Net Core(2.0 及以上)与.Net Framework(4.0 及以上)的工具,已被.Net 圈内多家大厂采用。该工具在 IDataAccess 接口中提供,主要提供了执行 Sql 语句、执行 Sp 存储过程、创建参数(输入/输出/返回)和事务等四大功能。它可以通过设定 DatabaseType 属性,支持所有种类数据库,包括 MySql、Oracle、PostgreSQL、SqlServer、Sqlite、Access、ODBC 等。同时,它还提供了查询多数据、选出单数据、参数等使用示例。
【算法】国庆加班,火锅与 Linq.AddRange 的奇妙螺旋
https://www.cnblogs.com/lan80/p/17744494.html
在国庆假期,小悦在家享受火锅时接到公司电话,需要处理一个关于小视频螺旋排序算法的紧急项目。尽管感到棘手,小悦还是决定挑战。她通过研究和实践,逐渐掌握了螺旋排序算法的核心思想,并开始编写代码实现这个算法。虽然劳累,但解决问题的过程让她感到乐趣和喜悦。最终,她成功运行出结果,心中充满了成就感。这个国庆假期,虽然没有休息和放松,但她在工作中取得了宝贵的进步。回到家中,她继续享受火锅,收获了成长和充实。
C#使用 iKvm 黑科技无缝接入 JVM 生态
https://www.cnblogs.com/deali/p/17744798.html
本文介绍了如何在 C#中使用 Java 的 NLP 工具。作者首先介绍了 iKvm,这是一个 Java 在 Microsoft .NET 平台的实现,可以在 C#中直接调用 Java 的 jar 包或将其转译为.Net 平台的 dll。然后,作者详细介绍了如何在项目中添加 iKvm 和 Maven 的依赖,并使用 iKvm 将 Java 的 jar 包转译为.Net 的 dll。最后,作者以 HanLP 为例,展示了如何在 C#中使用 Java 的 NLP 工具进行命名实体识别。
一套基于 .NET Core 开发的支付 SDK 集 - paylink
https://www.cnblogs.com/Can-daydayup/p/17745110.html
本文介绍了基于.NET Core 开发的支付 SDK 集:paylink,它可以简化 API 调用和通知处理流程,提高工作效率。paylink 支持.NET Core 3.1、.NET 6.0、.NET 7.0 等运行环境,并且支持支付宝支付和微信支付等渠道。文章还提供了微信公众号支付的示例代码,详细代码可以在示例项目中查阅。
本计划在 .NET 8 中推出的 WASI 推迟到 .NET 9
https://www.cnblogs.com/shanyou/p/17739970.html
.NET 8 计划中的 WASI 已被推迟到.NET 9。从.NET 8 Preview 4 开始,支持生成与 WASI 兼容的.wasm 文件,可以使用 WebAssembly 运行时 Wasmtime CLI 运行。WASI 的支持最早在 Steve Sanderson 的个人仓库开始引入,后来正式引入到 dotnet/dotnet-wasi-sdk,现在已经引入到 dotnet/runtime 的 WASI 跟踪问题。.NET 8 添加了一个新的“wasi-experimental”工作负载,取代了早期的 Wasi.Sdk,这是为服务器端 WebAssembly 方案提供.NET 本机内置支持的一个步骤。由于 WASI 预览版 2 和 3 可能会引入重大变化,这对于.NET 对 WASI 的支持非常有意义。
解决因对 EFCore 执行 SQL 方法不熟练而引起的问题
https://www.cnblogs.com/azrng/p/17750328.html
本文主要讨论了在使用 EFCore 执行 SQL 文件时遇到的问题和解决方案。作者在尝试使用 ExecuteSqlAsync 方法执行 SQL 语句时遇到了错误,原因是方法接收的参数是 FormattableString,而作者在构建这个参数时使用了错误的方式。通过查看源码和进行测试,作者发现问题出在 ExecuteSqlAsync 方法的入参上,解决方案是先定义一个 FormattableString 类型直接传入,或者在 SQL 语句中直接插入变量。但是,作者提醒读者注意,ExecuteSqlAsync 方法中的 SQL 在 EFCore 中并没有被放入一个事务中,如果有需要,就需要自己创建事务。最后,作者提出了一个未完成的问题,即如何执行 SQL 文件,提出了使用 ADO.NET 进行操作的可能解决方案。
文章《Semantic Kernel -- LangChain 的替代品?》的错误和疑问 探讨
https://www.cnblogs.com/shanyou/p/17742002.html
本文主要讨论了 Semantic Kernel(SK),这是微软推出的一种结合大语言模型(LLM)与传统编程技术的开源编程框架。SK 采用 C#开发,因为微软的许多产品都是用 C#开发的,而且许多商业系统也是用 C#或 Java 这样的强类型语言构建的。SK 不仅支持 OpenAI,Azure OpenAI,HuggingFace 上的模型,还可以支持任何 LLM。SK 鼓励对大模型的支持作为单独插件独立维护,以增强 SK 的模块化和可维护性。SK 还有一个基于 YAML 的 DSL 定义和执行复杂工作流的流业务流程协调程序扩展,提供灵活性,支持通用技能,包括语义函数、原生函数和需要聊天交互的技能。SK 使构建企业 AI 编排器变得容易,是 Copilot Stack 的中心。
记一次 .NET 某账本软件 非托管泄露分析
https://www.cnblogs.com/huangxincheng/p/17746280.html
本文主要讲述了一个.NET 程序集泄露导致的 CLR 私有堆泄露的案例。作者在中秋国庆长假结束后,分享了这个奇奇怪怪的.NET 生产事故。通过使用 WinDbg 分析,作者发现当前的提交内存占用了 2.19G,进程堆占用 1G,差不多占了一半,但不能说明就是非托管内存泄露。接下来,作者继续观察下托管堆,发现当前的托管堆占用仅 195M,这就更好的验证当前确实存在非托管内存泄露。最后,作者通过观察 CLR 私有堆,发现总的大小是 1.19G,基本就搞清楚了,然来是程序集泄露。
.Net7 自定义 GC 垃圾回收器
https://www.cnblogs.com/tangyanzhi1111/p/17748346.html
本文介绍了如何在.Net7 中自定义垃圾回收器(GC)。在.Net7 中,CLR 和 GC 已经分离,使得自定义 GC 变得更容易。首先,下载并将 Custom.dll 复制到.Net 目录。然后,在 C#代码中,设置环境变量 DOTNET_GCName 的值为 Custom.dll。运行代码后,可以看到自定义 GC 的效果。CLR 在初始化时,会检查是否存在 DOTNET_GCName 环境变量,如果存在,则使用该环境变量指定的 GC 替换默认的 GC。自定义 GC 需要新建一个 C++ DLL 库项目,引入两个头文件,实现三个接口,并导出两个函数。
ASP.NET 6 启动时自动创建 MongoDB 索引
https://www.cnblogs.com/edisonchou/p/auto-create-mongoindex-in-aspnet6.html
本文由 Edison 撰写,介绍了如何在 ASP.NET 6 应用启动时通过代码自动创建 MongoDB 的索引。索引是一种提高查询速度和防止脏数据插入的数据结构,支持普通字段、内嵌文档中的键和数组元素进行索引。MongoDB 支持多种类型的索引,如唯一索引、稀疏索引、复合索引、TTL 索引、全文索引、二维平面索引和地理空间索引。通过 Mongo Shell 可以进行索引的创建、查询和删除。文章还提供了一个 Entity 的定义示例,并介绍了如何使用 MongoDbConnection,一个包裹 MongoClient 的单例对象,来操作 MongoDB。
主题
C# 开发工具包 - 现已全面上市 - .NET 博客
https://devblogs.microsoft.com/dotnet/csharp-dev-kit-now-generally-available/
C# 开发工具包现已全面上市。
C# Dev Kit 是 Visual Studio Code 中 C# 开发的扩展。通过将 Visual Studio 中包含的解决方案资源管理器和测试资源管理器等功能引入 Visual Studio Code,它提供了超越现有 C# 开发扩展的功能。它不仅支持在 Windows 上使用,还支持在 Linux 和 macOS 上使用。
使用此扩展需要 Visual Studio 订阅(包括社区)许可证。
.NET 8 中的 Arm64 性能改进 - .NET 博客
https://devblogs.microsoft.com/dotnet/this-arm64-performance-in-dotnet-8/
.NET 8 中 Arm64 性能改进的说明。
条件选择
条件比较
条件递增、否定、反转
VectorTableLookup 和 VectorTableLookupExtension
连续寄存器分配
窥视孔优化
将连续的“ldr”和“str”替换为“ldp”和“stp”
将
ldp
/stp
与 SIMD 寄存器结合使用将“str wzr”对替换为“str xzr”
将负载替换为“mov”
mul + neg -> mneg 转换
提高代码质量
更快的 Vector128/Vector64 比较
改进的向量 == Vector128<>.Zero
展开记忆移动
提高吞吐量
System.Text.Json 的便利 - .NET 博客
https://devblogs.microsoft.com/dotnet/the-convenience-of-system-text-json/
System.Text.Json 的便利性说明。
本文介绍了使用常用 API(序列化器、读取器/写入器)作为模型(包括 JSON.NET)的性能和用法。
宣布新版本!| Evergine 9 月 23 日 - Evergine
https://evergine.com/evergine-release-september-2023/
Evergine 2023 年 9 月版已发布。
此版本包括对 iOS、Metal 和 .NET MAUI 的支持,以及用于变形动画系统和 XRV 框架的新模块以及性能改进。
Evergine 通过 Metal API 扩展到 iOS - Evergine[1]
文章、幻灯片等
显示少量小数 - Qiita
https://qiita.com/hiro_t/items/b83af07c232ce677cae3
格式化 Decimal 字符串时小数部分规范的比较。
内存映射文件和覆盖结构
https://blog.stephencleary.com/2023/09/memory-mapped-files-overlaid-structs.html
如何将内存映射文件上的数据作为结构引用。
Microsoft 如何为残障开发人员提供支持:庆祝 NDEAM - Visual Studio 博客
https://devblogs.microsoft.com/visualstudio/celebating-ndeam-vs-code-visual-studio/
为了庆祝 NDEAM(全国残疾人就业意识月),了解 Microsoft 对残疾开发人员的支持。
如何将 Godot 的 C#项目分成多个项目来管理?
https://zenn.dev/numani/articles/godot-split-project
在 Godot 中创建 C# 项目且无法在类库项目中附加类的问题。
如何使用 gdb 调试 .NET 项目 - Qiita
https://qiita.com/daredeshow/items/aa2b80e4463266ac3cb0
当 .NET 应用程序在 Linux 上因 SEGV 崩溃时,如何使用 gdb 调试 .NET 应用程序。
可以将 .NET 8 Identity API 端点与 IdentityServer 一起使用吗?
https://andrewlock.net/can-you-use-the-dotnet-8-identity-api-endpoints-with-identityserver/
关于 .NET 8 Identity API 和 IdentityServer 之间的关系和机制,以及关于用 .NET 8 Identity API 端点替换 IdentityServer 模板。
Resharper 2023.2 带来预测调试器
https://www.infoq.com/news/2023/10/resharper-predictive-debugger/
ReSharper 2023.2 中引入预测调试器
.NET Conf 学生专区回来了!-.NET 博客
https://devblogs.microsoft.com/dotnet/the-dotnet-conf-student-zone-is-back/
关于 2023 年.NET Conf 学生专区的举办。
.NET Conf 学生专区是针对初学者/学习者的会议活动。该活动将于 11 月 13 日举行。
JetBrains .NET Day Online '23 的录音现已推出 | .NET 工具博客
https://blog.jetbrains.com/dotnet/2023/10/02/recordings-jetbrains-dotnet-day-online-23/
JetBrains .NET Day Online 的录制现已推出。提供了 10 个与 .NET 相关的会议的录音。
GitHub Actions Runner 深入探究:注册和设置
https://dev.to/cwprogram/github-actions-runner-deep-dive-registration-and-setup-1ojb
一篇解释 GitHub Actions Runner 源代码的文章。本文介绍了如何注册为跑步者并开始使用。
了解 IAsyncEnumerable - Qiita
https://qiita.com/TsuyoshiUshio@github/items/c4b9929d88d1cd8cabb1
简要说明如何使用 IAsyncEnumerable 和用例。
前滚到 .NET 的主要版本
https://weblog.west-wind.com/posts/2023/Oct/02/Rolling-Forward-to-Major-Versions-in-NET
如何前滚运行应用程序的运行时版本(例如在 .NET 8 上运行使用 .NET 7 构建的应用程序)。
将 http/2 与 ASP.NET Core 结合使用 - Traefik/Kubernetes/container 示例
https://josef.codes/using-http2-with-asp-net-core-traefik-kubernetes-container-example/
关于在 Kubernetes 上配置 ASP.NET Core 应用程序以侦听具有 TLS 的 HTTP/2。
.NET 迁移的故事 - 我们的第一视角
https://www.jimmybogard.com/tales-from-the-net-migration-trenches-our-first-views/
.NET Framework 到 .NET 迁移差距系列。迁移视图等时的捆绑处理
SQL-Server (C#) 的多个结果集,包括 Dapper
https://dev.to/karenpayneoregon/multiple-result-sets-for-sql-server-c-include-dapper-1fpa
如何使用 Dapper 等从 SQL Server 接收多个结果集
C# 提示:通过初始化集合大小来改进内存分配
https://www.code4it.dev/csharptips/initialize-collection-size/
关于 List 和 HashSet 通过设置初始大小来分配内存的区别。
糟糕:应用程序随机崩溃!
https://chnasarre.medium.com/crap-the-application-is-randomly-crashing-b105a6a5a7e8
根据 Datadog 分析器中的示例,了解如何使用 WinDbg 调查应用程序崩溃。
网站、文档等
.NET 多平台应用程序 UI (.NET MAUI) 文档:2023 年 9 月的新增功能 - .NET MAUI
https://learn.microsoft.com/en-us/dotnet/maui/whats-new/dotnet-docs-maui-mod0
.NET MAUI 2023 年 9 月最新信息文档。包含来自 Xamarin.Forms 的迁移文档。
新的 .NET MAUI 文档详细介绍了如何从 Xamarin.Forms 迁移 -- Visual Studio 杂志[2]
推文
引入一个总结与 Stride(游戏引擎)相关信息的存储库。
https://x.com/strdedotnet/status/1708525831864139906?s=12
![661c6c42d9e399bf5e076cae1879b986.png](https://i-blog.csdnimg.cn/blog_migrate/9935544db31d3da17dfbf326c8e32ac9.png)
使用 .NET MAUI 和 Evergine 合并 3D 图形的示例应用程序。
https://x.com/jsuarezruiz/status/1708875963260346409?s=12
![bab9b170b0b9dc37bcaa0f3152a33289.png](https://i-blog.csdnimg.cn/blog_migrate/d4649684c58d18a633690f57c3cb40ad.png)
深入探索
JonDouglas 为 NuGet 添加赞助商链接功能 · Pull Request #12922 · NuGet/Home
https://github.com/NuGet/Home/pull/12922
建议 PR 在 NuGet 包信息中包含赞助商链接。
https://x.com/nuget/status/1709955756823314756?s=12
版权声明
国内板块由 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,欢迎大家加入。
抽奖送书活动预热!!!
感谢大家对我公众号的支持与陪伴!为庆祝公众号一周年,抽奖送出一些书籍,请大家关注公众号后续推文!
![81495262fe76b54d040eae92f7eca9fc.png](https://i-blog.csdnimg.cn/blog_migrate/add0e8780c4c6e7de0d77bafe75ce34d.png)
参考
[1]
Evergine 通过 Metal API 扩展到 iOS - Evergine: https://evergine.com/ios-metal-api/
[2]新的 .NET MAUI 文档详细介绍了如何从 Xamarin.Forms 迁移 -- Visual Studio 杂志: https://visualstudiomagazine.com/articles/2023/10/06/net-maui-docs.aspx