会员
众包
新闻
博问
闪存
赞助商
HarmonyOS
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
叫我安不理
博客园
首页
新随笔
联系
订阅
管理
[置顶]
.NET Core 托管堆内存泄露/CPU异常的常见思路
摘要: 常见的思路 内存泄露 托管内存暴涨大多数原因都是因为对象被GC Root(stack,gchandle,finalizequeue)持有,所以一直无法释放,所以观察的重点都在对象的可疑GC Root 上 CPU高 CPU占用率高是由线程抬起来,因此观察线程当时在做什么,调用堆栈上的方法执行了多久是重
阅读全文
posted @ 2025-02-20 14:51 叫我安不理
阅读(1093)
评论(10)
推荐(10)
[置顶]
.NET Core 内存结构体系底层原理浅谈
摘要: 物理内存与虚拟内存 物理内存(Physical Memory) 定义:物理内存是计算机硬件中的实际RAM(如DDR5内存条),直接通过总线与CPU连接,用于临时存储运行中的程序和数据。 虚拟内存(Virtual Memory) 定义:由操作系统管理的抽象内存层,通过结合物理内存和磁盘空间(如页面文件
阅读全文
posted @ 2025-02-11 17:40 叫我安不理
阅读(1428)
评论(2)
推荐(17)
[置顶]
.NET Core 对象分配(Alloc)底层原理浅谈
摘要: 对象分配策略 .NET程序的对象是由CLR控制并分配在托管堆中,如果是你,会如何设计一个内存分配策略呢? 按需分配,要多少分配多少,移动alloc_ptr指针即可,没有任何浪费。缺点是每次都要向OS申请内存,效率低 预留缓冲区,降低了向OS申请内存的频次。但在多线程情况下,alloc_ptr锁竞争会
阅读全文
posted @ 2025-01-06 17:09 叫我安不理
阅读(927)
评论(2)
推荐(11)
[置顶]
.NET Core 堆结构(Heap)底层原理浅谈
摘要: .Net托管堆布局 加载堆 主要是供CLR内部使用,作为承载程序的元数据。 HighFrequencyHeap 存放CLR高频使用的内部数据,比如MethodTable,MethodDesc. 通过is判断类型之间的继承关系,调用接口的方法和虚方法,都需要访问MethodTable LowFrequ
阅读全文
posted @ 2024-12-11 15:20 叫我安不理
阅读(1656)
评论(1)
推荐(23)
[置顶]
.NET Core 锁(Lock)底层原理浅谈
摘要: CPU原子操作 原子操作,指一段逻辑要么全部成功,要么全部失败。概念上类似数据库事物(Transaction). CPU能够保证单条汇编的原子性,但不保证多条汇编的原子性 那么在这种情况下,那么CPU如何保证原子性呢?CPU本身也有锁机制,从而实现原子操作 眼见为实 int location = 1
阅读全文
posted @ 2024-12-05 17:45 叫我安不理
阅读(3123)
评论(11)
推荐(26)
[置顶]
.NET Core 异步(Async)底层原理浅谈
摘要: 简介 多线程与异步是两个完全不同的概念,常常有人混淆。 异步 异步适用于"IO密集型"的场景,它可以避免因为线程等待IO形成的线程饥饿,从而造成程序吞吐量的降低。 其本质是:让线程的cpu片不再浪费在等待上,期间可以去干其它的事情。 要注意的是:Async不能加速程序的执行,它只能做到不阻塞线程。
阅读全文
posted @ 2024-11-29 15:10 叫我安不理
阅读(3169)
评论(6)
推荐(20)
[置顶]
.NET Core 线程池(ThreadPool)底层原理浅谈
摘要: 简介 上文提到,创建线程在操作系统层面有4大无法避免的开销。因此复用线程明显是一个更优的策略,且降低了使用线程的门槛,提高程序员的下限。 .NET Core线程池日新月异,不同版本实现都有差别,在.NET 6之前,ThreadPool底层由C++承载。在之后由C#承载。本文以.NET 8.0.8为蓝
阅读全文
posted @ 2024-11-25 17:00 叫我安不理
阅读(3472)
评论(10)
推荐(38)
[置顶]
管中窥豹----.NET Core到.NET 8 托管堆的变迁
摘要: 简介 https://www.cnblogs.com/lmy5215006/p/18494483 在研究.NET String底层结构时,我所观察到的情况与《.NET Core底层入门》,《.NET内存管理宝典》书中描述不符。故多研究了一下。发现.NET托管堆的结构也是越来越多,越来越高性能。 //
阅读全文
posted @ 2024-10-30 16:48 叫我安不理
阅读(2680)
评论(6)
推荐(42)
[置顶]
一张图带你了解.NET终结(Finalize)流程
摘要: 简介 "终结"一般被分为确定性终结(显示清除)与非确定性终结(隐式清除) 确定性终结 提供给开发人员一个显式清理的方法,比如try-finally,using,IDisposable。 非确定性终结 提供一个注册的入口,只知道会执行,但不清楚什么时候执行。比如析构函数。 为什么需要终结机制? 首先纠
阅读全文
posted @ 2024-10-11 15:52 叫我安不理
阅读(2547)
评论(13)
推荐(21)
2025年8月27日
优雅求模,一致性哈希算法
摘要: 传统哈希局限性 求模,也就是 key % 节点数 N, 当节点数量变化时(如服务器扩容 / 下线),几乎所有数据的映射关系都会失效,导致大量数据需要重新迁移,引发 “哈希雪崩”。 key的hash值 节点数 求模 10 3 10 % 3 = 1 11 3 11 % 3 = 2 12 3 12 % 3
阅读全文
posted @ 2025-08-27 12:28 叫我安不理
阅读(1044)
评论(2)
推荐(9)
2025年7月20日
浅谈为什么我讨厌分布式事务
摘要: CAP,基础理论 CAP理论是分布式系统中最核心的理论基础 Partition tolerance,分区容错性 the system continues to operate despite arbitrary message loss or failure of part of the syste
阅读全文
posted @ 2025-07-20 12:12 叫我安不理
阅读(3273)
评论(10)
推荐(20)
2025年6月25日
为什么说方法的参数最好不要超过4个?
摘要: 简介 在很多年前的一次Code Review中,有大佬指出,方法的参数太多了,最好不要超过四个,对于当时还是萌新的我,虽然不知道什么原因,但听人劝,吃饱饭,这个习惯也就传递下来了,直到参加工作很多年后,才明白这其中的缘由。 调用协定 在计算机编程中,调用协定(Calling Convention)是
阅读全文
posted @ 2025-06-25 22:36 叫我安不理
阅读(4403)
评论(33)
推荐(91)
2025年6月7日
C#代码如何影响CPU缓存速度?
摘要: CPU与RAM的隔阂 CPU与RAM是两个独立的硬件,并非集成在一起。所以他们两个之间一定会存在一个连接的桥梁,这个桥梁的名字叫做内存总线。 内存总线由三部分组成: 地址总线(Address Bus) 用于传输内存地址,也就是我们经常看到的0X77F84FAB这种类似的内存地址,一根总线代表一个电信
阅读全文
posted @ 2025-06-07 14:59 叫我安不理
阅读(1852)
评论(10)
推荐(23)
2025年5月25日
浅谈.NET微服务架构的演变
摘要: 服务架构的演变 单体架构=>分布式架构=>SOA架构=>微服务架构=>Service Mesh=>Cloud Native 单体架构/垂直架构 分布式架构 SOA架构 微服务架构 微服务架构的核心 需要注意一点,微服务架构是分布式架构的一种落地,它们之间是接口与实现类的关系。 服务发现 为什么需要服
阅读全文
posted @ 2025-05-25 12:09 叫我安不理
阅读(2033)
评论(2)
推荐(18)
2025年5月22日
C#网络编程(六)----Socket编程模型
摘要: 简介 Socket(套接字)是计算机网络中的一套编程接口,是网络编程的核心,它将复杂的网络协议封装为简单的API,是应用层(HTTP)与传输层(TCP)之间的桥梁。 应用程序通过调用Socket API,比如connect、send、recv,无需处理IP包封装,路由选择等复杂网络操作,屏蔽底层细节
阅读全文
posted @ 2025-05-22 15:03 叫我安不理
阅读(635)
评论(0)
推荐(4)
2025年5月20日
C#网络编程(五)----细嗦TCP粘包
摘要: 前情提要 四层网络模型各司其职,消息(SDU)在进入每一层时都会多加一个报头(PCI),这个PCI记录着该SDU的一些关键统计信息。SDU+PCI合并起来就组成一个完整的消息,简称为PDU 链路层:帧(Frame)头部作用 源 MAC 地址 和 目的 MAC 地址,用于在局域网内通信唯一标识设备,实
阅读全文
posted @ 2025-05-20 13:46 叫我安不理
阅读(508)
评论(1)
推荐(3)
2025年5月14日
C#网络编程(四)----HttpClient
摘要: 简介 HttpClient是C#中用于发送/接收HTTP请求的核心类,属于 System.Net.Http 命名空间。它是 .NET 中处理网络通信的现代 API,设计目标是替代早期的 WebClient/WebRequest/WebResponse/HttpWebRequest,支持异步编程、灵活
阅读全文
posted @ 2025-05-14 22:08 叫我安不理
阅读(1300)
评论(11)
推荐(11)
2025年5月12日
C#网络编程(三)----HTTP协议
摘要: HTTP协议 HTTP(超文本传输协议),属于应用层协议。基于TCP连接实现。但通信方向始终由客户端发起(HTTP/2之后已修改)。 维度 TCP/IP协议族(传输层/TCP) HTTP协议(应用层) 通信方向 全双工(双向同时通信) 单向(客户端→服务器请求,服务器响应) 协议层次 传输层(负责数
阅读全文
posted @ 2025-05-12 16:39 叫我安不理
阅读(455)
评论(0)
推荐(1)
2025年4月29日
C#网络编程(二)----网络层/链路层
摘要: 网络层协议 网络层(Network Layer) 的主要功能是实现主机之间的逻辑寻址、路由选择和分组转发,确保数据在不同网络(如局域网、广域网)之间的传输 协议类别 核心协议 路由协议 辅助协议 扩展协议 功能 逻辑寻址、分组转发 路径计算与路由表维护 地址解析、错误控制、组播管理 安全、NAT、Q
阅读全文
posted @ 2025-04-29 14:24 叫我安不理
阅读(583)
评论(1)
推荐(2)
下一页
公告