【发布时间】:2019-10-14 09:39:29
【问题描述】:
我想知道实例化新的 MySqlConnection 对象与将实例化的 MySqlConnection 对象传递到 C# 中的“使用”语句中是否有任何区别?
如果是,最好的方法是什么?为什么它比另一个更可取?
下面是模拟这两种情况的示例代码:-
public class QueryService() {
private IDbConnection con;
public QueryService() {
con = new MySqlConnection(connectionString));
}
public List<ExampleDto> QueryList() {
using (con)
{
con.Open();
// Do work here; connection closed on following line.
}
}
}
public class QueryService() {
public QueryService() {}
public List<ExampleDto> QueryList() {
using (var con = new MySqlConnection(connectionString)))
{
con.Open();
// Do work here; connection closed on following line.
}
}
}
【问题讨论】:
-
你知道
using是什么意思吗?如果您调用QueryList会发生什么情况?您的第一个代码会调用两次? -
作为一般规则,将一次性资源的范围保持在尽可能小,以尽量减少泄漏的机会。在您的代码中,如果从不调用
QueryService.QueryList(例如,因为发生异常),则永远不会释放连接。作为一个更更的一般规则,将您使用的anything的范围尽可能小,不管是否是一次性的——这使得代码更容易推理。 -
@Selvin 是的,我知道
using是什么意思,是的,QueryList会被多次调用。 -
是的。 (这是假设
MySqlConnection实现了连接池,就像任何理智的数据库驱动程序一样。) -
我猜是因为问题不是问 using 是什么意思? .. 是的,QueryList 会被多次调用。 ...所以这意味着不......你不知道会发生什么......好吧,我会告诉你......you would use disposed object which will end with Exception
标签: c# dapper mysqlconnection