mysql 连接池

关键机制

  1. 按连接字符串分组

// 同一个 connStr 共享一个池
“Server=192.168.1.1;Database=mes;… Pooling=true;”

不同的连接字符串(比如不同 IP、不同数据库)各自独立一个池,互不干扰。

  1. Dispose 不是关闭

using var conn = CreateConnection(); // 从池取或新建
// … 执行 SQL …
// using 结束时调用 conn.Dispose()

// Dispose() 不关 TCP,而是把连接标记为"空闲"归还到池
// 下次 CreateConnection() 直接复用这个 TCP 连接,跳过三次握手

  1. 自动清理死连接

池中空闲连接如果因为网络断开、MySQL 重启、防火墙超时等原因已失效,下次被取出来时,MySQL 驱动会在 Open()
时发现并自动移除,然后静默创建新连接。应用层无感。

  1. 池大小控制

Pooling=true ← 启用
MinimumPoolSize=1 ← 启动时就建好 1 个连接,不会完全清空
MaximumPoolSize=10 ← 最多 10 个 TCP 连接
ConnectionIdleTimeout=300 ← 空闲超过 300 秒(5分钟)的连接才真正关闭,缩回 MinimumPoolSize

对应到代码里的流程

Form1 扫码
→ IsDatabaseConnected() —— 检查 isDbConnected 标志,不是真的连数据库
→ CreateConnection() —— 从池取连接(如果池里没有空闲且未满,建新 TCP)
→ SELECT —— 执行查询
→ using 结束 Dispose() —— 归还到池(TCP 不断开)
→ 下次扫码重复上面流程 —— 大概率复用同一个 TCP 连接

所以连接池的本质就是:TCP 连接复用 + 自动保活 + 透明重建。 应用层只需 new + Open + Dispose,底层是复用还是新建,完全不用关心。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值