-
我在 C# 里打开了一堆文件流和数据库连接用完就不管了,以为有垃圾回收会自动清理,结果跑久了报 too many open files、连接池也满了,因为 GC 根本不负责释放这些非托管资源的深度复盘
我有段代码要读很多文件、查很多次数据库,写得很自然:new FileStream、new SqlConnection 用完就不管,心想 C# 有垃圾回收、对象没人引用了 GC 会自动清理。功能测试都过了,可一上压力、跑久了服务就崩:报 too many open files(文件句柄太多)、连接池满了、socket 也耗尽。复盘才搞懂:.NET 的 GC 只负责回收托管堆上的内存,但文件句柄、数据…- 0
- 0
-
我的 C# 服务跑一段时间就报连接池耗尽、超时连不上数据库,代码看着都正常、连接也都"用完了",我对着 IDisposable 没释放排查了大半天的复盘
用 C# 写的数据服务,刚启动正常,跑上几小时到一天就报 The connection pool has been exhausted(连接池耗尽)、获取连接超时、数据库操作全线卡死,重启又好、过段时间又复发。盯着代码看了又看,每个查询都好好地拿连接、执行SQL、拿结果,逻辑上连接都用完了啊怎么会耗尽?排查大半天才理解 C# 里对资源管理至关重要却极易忽略的概念——IDisposable 与 us…- 0
- 0
-
服务跑一段时间就报连接池已满和打开文件太多、重启又复发像慢慢漏气的轮胎:IDisposable 资源没 Dispose 导致连接句柄泄漏的避坑复盘
这是一个跑着跑着就枯竭的慢性病,和我之前遇到的内存泄漏有几分神似但病根不同。现象是我们一个 C# 写的服务刚启动时一切正常,可运行一段时间后几小时到一两天不等就开始报错,一会儿是数据库相关的连接池已满无法从池中获取连接,一会儿又是 Too many open files 打开的文件句柄太多,重启一下好了再跑一段时间又复发,就像一个会慢慢漏气的轮胎跑一阵就瘪补一下又能跑一阵。排查的结果指向了 C# …- 0
- 0
using
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!



