关键机制按连接字符串分组// 同一个 connStr 共享一个池“Server192.168.1.1;Databasemes;… Poolingtrue;”不同的连接字符串比如不同 IP、不同数据库各自独立一个池互不干扰。Dispose 不是关闭using var conn CreateConnection(); // 从池取或新建// … 执行 SQL …// using 结束时调用 conn.Dispose()// Dispose() 不关 TCP而是把连接标记为空闲归还到池// 下次 CreateConnection() 直接复用这个 TCP 连接跳过三次握手自动清理死连接池中空闲连接如果因为网络断开、MySQL 重启、防火墙超时等原因已失效下次被取出来时MySQL 驱动会在 Open()时发现并自动移除然后静默创建新连接。应用层无感。池大小控制Poolingtrue ← 启用MinimumPoolSize1 ← 启动时就建好 1 个连接不会完全清空MaximumPoolSize10 ← 最多 10 个 TCP 连接ConnectionIdleTimeout300 ← 空闲超过 300 秒5分钟的连接才真正关闭缩回 MinimumPoolSize对应到代码里的流程Form1 扫码→ IsDatabaseConnected() —— 检查 isDbConnected 标志不是真的连数据库→ CreateConnection() —— 从池取连接如果池里没有空闲且未满建新 TCP→ SELECT —— 执行查询→ using 结束 Dispose() —— 归还到池TCP 不断开→ 下次扫码重复上面流程 —— 大概率复用同一个 TCP 连接所以连接池的本质就是TCP 连接复用 自动保活 透明重建。 应用层只需 new Open Dispose底层是复用还是新建完全不用关心。