首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >“打开/关闭”SqlConnection还是保持打开?

“打开/关闭”SqlConnection还是保持打开?
EN

Stack Overflow用户
提问于 2010-12-14 20:59:49
回答 6查看 106.4K关注 0票数 130

我使用静态方法在简单的静态类中实现了我的业务逻辑。这些方法中的每一个都会在被调用时打开/关闭SQL连接:

代码语言:javascript
复制
public static void DoSomething()
{
    using (SqlConnection connection = new SqlConnection("..."))
    {
        connection.Open();

        // ...

        connection.Close();
    }
}

但我认为传递connection对象并避免打开和关闭连接可以节省性能。很久以前,我用OleDbConnection类(对SqlConnection不太确定)做了一些测试,它确实对我的工作很有帮助(就我记忆所及):

代码语言:javascript
复制
//pass around the connection object into the method
public static void DoSomething(SqlConnection connection)
{
    bool openConn = (connection.State == ConnectionState.Open);
    if (!openConn)
    {
        connection.Open();
    }

    // ....

    if (openConn) 
    {
        connection.Close();
    }
}

所以问题是-我应该选择方法(a)还是方法(b)?我在另一个堆栈溢出问题中读到,连接池为我节省了性能,我根本不必费心……

PS。这是一个ASP.NET应用程序--连接只存在于web请求期间。不是win-app或服务。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-12-14 21:02:54

坚持选择a

连接池是您的朋友。

票数 87
EN

Stack Overflow用户

发布于 2010-12-14 21:05:01

每次都使用方法(a)。当您开始扩展您的应用程序时,如果您不这样做,处理状态的逻辑将变得非常痛苦。

连接池做它在tin上所说的事情。只要想想当应用程序扩展时会发生什么,以及手动管理连接打开/关闭状态会有多难。连接池在自动处理这方面做得很好。如果您担心性能问题,可以考虑使用某种内存缓存机制,这样就不会阻塞任何东西。

票数 80
EN

Stack Overflow用户

发布于 2010-12-14 21:02:25

总是在完成连接后立即关闭它们,这样它们的底层数据库连接就可以回到池中,并可供其他调用者使用。连接池得到了很好的优化,因此这样做不会带来明显的损失。对于事务的建议基本上是一样的--当你完成时,保持它们简短并关闭。

如果在使用多个连接的代码周围使用单个事务时遇到MSDTC问题,情况会变得更加复杂,在这种情况下,您实际上必须共享连接对象,并且只有在事务完成后才关闭它。

然而,您在这里是手工操作的,所以您可能想要研究一下为您管理连接的工具,如DataSets、Linq to SQL、实体框架或NHibernate。

票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4439409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档