很明显,SqlConnections是合并的,因此using关键字似乎很完美,这是我一直使用和看到的方法.
例如…
public List<string> MyQuery() { List<string> list = new List<string>(); using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); // do some stuff with connection, process the resultset and fill the list. } return list; }
问题是:对于一个网页的几个查询,最好每次创建连接或共享查询之间的连接,为一个工作单元共享它?
表现会更大还是仅仅是过早不必要的微观优化?
尽快关闭每个连接或者更好地尝试在一个工作单元中将所有查询打包在一起真的很重要吗?
一个工作单元的例子可以是例如……
List<string> list1, list2; string myvalue1, string myvalue2; using (SqlConnection conn = new SqlConnection(connection)) { list1 = MyQuery1(conn); list2 = MyQuery2(conn); myvalue1 = MyQuery3(conn); myvalue2 = MyQuery4(conn); }
这可能发生在页面加载期间,其中应从数据库获取多个数据.
请注意,对于连接池,您实际上并没有使用每个“新”创建新连接…您通常只是从池中返回一个.因此,您应该尽可能晚地打开连接,并尽早关闭它们.
如果一组命令需要成为一个事务的一部分,那么它需要一起完成.但除此之外,我认为你应该在完成后总是关闭,并获得一个新的.
即使你没有在这些命令之间运行其他代码……如果线程上下文切换发生在两者之间怎么办?您的连接对象不必要地打开,什么都不做,等待控制回来.
如果你关闭它,它可能会回到游泳池.
查看更多关于c# – SqlConnection的设计模式,连接池和工作单元的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did69280