c# – SqlConnection的设计模式,连接池和工作单元
发布时间:2020-12-16 01:49:17 所属栏目:百科 来源:网络整理
导读:很明显,SqlConnections是合并的,因此using关键字似乎很完美,这是我一直使用和看到的方法. 例如… public Liststring MyQuery(){ Liststring list = new Liststring(); using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); //
很明显,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); } 这可能发生在页面加载期间,其中应从数据库获取多个数据. 解决方法
请注意,对于连接池,您实际上并没有使用每个“新”创建新连接…您通常只是从池中返回一个.
因此,您应该尽可能晚地打开连接,并尽早关闭它们. 如果一组命令需要成为一个事务的一部分,那么它需要一起完成.但除此之外,我认为你应该在完成后总是关闭,并获得一个新的. 即使你没有在这些命令之间运行其他代码……如果线程上下文切换发生在两者之间怎么办?您的连接对象不必要地打开,什么都不做,等待控制回来. 如果你关闭它,它可能会回到游泳池. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |