加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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);
}

这可能发生在页面加载期间,其中应从数据库获取多个数据.

解决方法

请注意,对于连接池,您实际上并没有使用每个“新”创建新连接…您通常只是从池中返回一个.

因此,您应该尽可能晚地打开连接,并尽早关闭它们.

如果一组命令需要成为一个事务的一部分,那么它需要一起完成.但除此之外,我认为你应该在完成后总是关闭,并获得一个新的.

即使你没有在这些命令之间运行其他代码……如果线程上下文切换发生在两者之间怎么办?您的连接对象不必要地打开,什么都不做,等待控制回来.

如果你关闭它,它可能会回到游泳池.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读