Dapper不管理连接生命周期,需用using确保连接及时归还连接池;正确做法是每次查询用using包裹SqlConnection,避免手动Open/Close或复用连接;连接池应合理配置Max/Min Pool Size和Connection Lifetime。

Dapper本身不管理连接生命周期,它只扩展IDbConnection,真正的连接关闭和释放由底层ADO.NET驱动(如SqlConnection)负责。所谓“优雅关闭”,核心是**让连接及时归还连接池,而非真正销毁**,同时避免泄漏或超时阻塞。
用using确保自动释放
这是最基础也最关键的实践。Dapper不持有连接,你必须显式创建、使用并释放它:
- ✅ 正确写法:每次查询都包裹在
using块中,连接在作用域结束时自动调用Dispose(),触发归池 - ❌ 错误写法:手动
new SqlConnection()却不Dispose(),或复用同一个连接实例跨多次查询——容易导致连接泄漏或状态混乱 - 注意:
connection.Close()不是必须的,因为Dispose()已包含关闭逻辑;但显式Open()仍需保留(除非Dapper内部自动打开)
别手动控制Open/Close,除非必要
Dapper的Query、Execute等方法默认会检查连接状态,并在需要时自动打开。你只需关注是否已用using包裹:
- 普通查询:直接传入未打开的连接,Dapper会自动处理
- 事务场景:必须手动
Open(),并在finally里Close()或依赖using——因为事务要求连接在整个过程中保持打开 - 避免这种冗余逻辑:
if (conn.State == Closed) conn.Open(); ... if (conn.State == Open) conn.Close();——交给using更安全
连接池配置要匹配实际负载
“优雅”还体现在连接不卡死、不超限。连接池不是万能的,需合理配置:
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~