[英]Should dapper use a “using” statement?
我见过有人在做的例子:
IDbConnection db = new MySqlConnection(conn);
var people = db.Query<People>("SELECT * FROM PEOPLE").ToList();
或者上面是一个不好的做法,并且所有查询都应该使用如下语句:
using (var db = new MySqlConnection(conn))
{
var people = db.Query<People>("SELECT * FROM PEOPLE").ToList();
}
正如其他人已经正确指出的那样,一般的最佳实践是在对象实现IDisposable
任何时候using
并且您知道对象的生命周期将会很短 - 也就是说,不会超过当前方法的持续时间。 这样做可确保及时清理稀缺的操作系统资源。 即使对象的处理由其终结器“支持”,您也不希望处于这样的情况:例如,您对文件或数据库有锁定,或者在终结器运行几次之前不会释放从现在起十亿纳秒。
但是,我会通过说除了及时处理非托管资源之外的其他原因而实施IDisposable
的少数类型,这样可以缓解这一建议。 在某些非常具体的情况下,您可以安全地跳过using
。 然而,这几乎是没有任何错误使用using
,即使它不是严格意义上讲必要的 ,所以我给你的建议是要慎之又慎的侧面和过度使用,而不是在使用using
。
Dapper对此没有看法; 你在这里using
是数据库连接。 如果您已完成连接:您已完成连接。 基本上,是的,您可能应该using
。
使用语句的主要目的是释放非托管资源。当不再使用对象时垃圾收集器会自动释放分配给它的内存,但有时垃圾收集器不会释放文件,流或数据库连接等资源。例。
可以想象它是一种显式处理对象的方法,而不是将它留给编译器,因此你可以说它是更好的实践。
根据我使用Sql Server和Oracle的经验(使用ODP.Net驱动程序和MS驱动程序),您需要使用Connections,Commands和Transactions,否则如果除了最简单的数据库交互之外,您将很快耗尽连接池。生产环境(连接池通常约为50 - 200个连接)。
您可能不会注意到开发环境中的行为,因为debug =大量重新启动会清除池。
正如上面的Eric Lippert所说,使用IDisposable对象是一般的好习惯。
实际上,您可以在SqlServer和Oracle的参数上跳过“使用”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.