简介 在 .NET 微服务里,只要你开始拆服务,很快就会遇到这几个现实问题: 服务实例越来越多,地址不固定 调用方不能再把 IP:Port 写死 某个实例挂了,调用方最好别继...
简介 在 .NET 微服务里,只要你开始拆服务,很快就会遇到这几个现实问题: 服务实例越来越多,地址不固定 调用方不能再把 IP:Port 写死 某个实例挂了,调用方最好别继...
简介 在 .NET 里做并发集合选型时,只要需求里出现这几个关键词: 生产者-消费者 任务排队 消息缓冲 先来先处理 很多时候你真正要找的,其实不是 ConcurrentSt...
简介 在 .NET 里做并发集合选型时,很多人最先想到的是: ConcurrentDictionary<TKey, TValue> ConcurrentQueue<T> Co...
简介 在 .NET 里做并发控制时,最常见的默认答案通常还是: 这没有问题。 但有一类场景,普通互斥锁会显得有点“太保守”: 读很多 写很少 读操作彼此其实并不冲突 比如: ...
简介 在 .NET 里提到线程同步,很多人的第一反应还是: 这套写法本身没有问题,而且已经用了很多年。 但从 .NET 9 和 C# 13 开始,官方开始明确给出一个更推荐的...
简介 在 .NET 里,只要你开始深入看并发控制,很快就会发现这样一个现象: 大多数业务代码都用 lock 异步场景更常见的是 SemaphoreSlim / AsyncLo...
简介 SignalR 在单节点开发环境里通常很好用。 你本地起一个应用,前端连上来,消息一发,聊天室、通知、在线状态、协作编辑似乎都没什么问题。 但很多团队一到生产环境,问题...
简介 只要你开始深入看 .NET 的并行调度模型,很快就会碰到一个高频词: 很多文章会告诉你: 它是“工作窃取” 每个线程有自己的队列 队列空了就去偷别人的任务 这些说法当然...
简介 Task.Run 是 .NET 里最常见、也最容易被误解的 API 之一。 很多人对它的第一印象是: “开个后台线程” “把同步代码变异步” “防止阻塞当前线程” 这些...
简介 在 .NET 里,只要你开始关注性能,尤其是这些场景: 高频字符串处理; 协议解析和编码; 临时 byte / char 缓冲区; 循环里的小数组分配; 希望减少 GC...
简介 如果说: Span<T> 解决的是“如何高效操作一段连续内存”; Memory<T> 解决的是“如何跨异步边界持有连续内存”; ReadOnlySequence<T> ...
简介 如果说 Span<T> 解决的是“如何高效处理一段连续内存”,Memory<T> 解决的是“如何跨异步边界持有一段连续内存”,那么 ReadOnlySequence<T...
简介 如果说 Span<T> 是 .NET 高性能内存体系里最亮眼的类型,那么 Memory<T> 就是它最重要的搭档。 很多人学完 Span<T> 后,马上会遇到几个现实问...
简介 在 .NET 里,只要你开始关注性能,尤其是这些场景: 字符串解析; 网络协议处理; 文件读取和缓冲区操作; JSON、CSV、日志、报文解析; 高频数组切片; 你几乎...
简介 在 .NET 项目里,很多“重复但又不能随便写错”的代码,本质上都不值得手写。 例如: DTO 映射代码; INotifyPropertyChanged 模板代码; 接...
简介 在 C#.NET 里,很多人第一次接触表达式树,通常是因为 LINQ、Entity Framework,或者某段代码里突然冒出了这样一行: 表面上看,它和普通 Lamb...
简介 在传统 HTTP 请求模型里,客户端发请求,服务端给响应,请求结束后连接关系基本也就结束了。 这套模型处理普通 CRUD 没问题,但一到下面这些场景就开始别扭: 聊天室...
简介 在 C#.NET 里,只要碰到“生产者不断产出数据,消费者持续处理数据”这类场景,最终都会绕到一个核心问题: 如何解耦生产速度和消费速度; 如何在高并发下保证吞吐量; ...
简介 BlockingCollection<T> 是 .NET 中非常重要且实用的线程安全、阻塞式的生产者-消费者集合类,位于 System.Collections.Conc...
简介 ConcurrentDictionary<TKey, TValue> 是 System.Collections.Concurrent 命名空间下的线程安全的键值对集合,...