【问题标题】:Having sql connection open for a long time长时间打开sql连接
【发布时间】:2013-05-07 10:11:38
【问题描述】:

我正在编写一个生成站点地图的程序。为了避免重复,我使用 MSSQL Server 来存储找到的链接。在这个过程中可能会读写数百万个链接,读写过程之间的间隔可能很小(我的意思是每次访问数据库之间的时间很短)。

我想知道我是否可以在程序启动时打开连接并在最后关闭它。请考虑创建一些站点地图可能需要几天时间才能完成。或者每次我想访问数据库时打开和关闭连接是否明智?

顺便说一下,我在本地使用sql server。

【问题讨论】:

    标签: c# sql-server-2008 database-connection


    【解决方案1】:

    您的问题的答案是Connection Pooling 功能。

    最好在需要时打开连接,访问您的数据,立即关闭并释放连接

    确实存在特定的工作模式

    using(SqlConnection con = new SqlConnection(.....))
    {
       ... do your work with the database here ....
    }
    

    using statement 确保在开口处创建的对象是闭合的并被放置在闭合大括号处。 即使在数据库代码中发生异常

    这并不意味着您不能尝试优化您的代码。例如,您可以将几个站点地图收集在一起并一口气编写它们,但通常最好遵循简单的工作模式,尽快完成工作并担心以后的优化。

    【讨论】:

    • 这正是我所需要的。非常感谢。
    【解决方案2】:

    您可以使用以下代码:

    SqlConnection conn;
    try
    {
        conn = new SqlConnection(_dbconnstr));
    }
    catch
    {
        //exceptions are bubbled
        throw;
    }
    finally
    {
        //Dispose is always called
        conn.Dispose();
    }
    

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      我通常在每次使用时打开和关闭连接。 当周围有很多连接时,必须释放资源。 如果你是唯一的人,你可能会保留你的资源。 注意设置超时连接。

      祝你好运!

      【讨论】:

      • 看看史蒂夫的回答它很棒,我认为你也应该使用它。
      • 问题是您是否应该打开和关闭连接。不是怎么做。
      【解决方案4】:

      最好打开/关闭连接。将连接打开没有任何好处。 ADO.NET Connection pooling(默认开启)将负责关闭哪个连接以及何时关闭。

      来自MSDN

      CAUTION 建议您在以下情况下始终关闭连接 您已完成使用它以便返回连接 到游泳池。这可以使用 Close 或 Dispose 来完成 Connection 对象的方法。未明确的连接 关闭可能不会被添加或返回到池中。例如,一个 超出范围但未明确说明的连接 关闭只会返回到连接池,如果最大 已达到池大小,连接仍然有效。

      【讨论】:

        【解决方案5】:

        如果你知道这需要一段时间,那么写入本地数据表,然后当达到阈值时,将所有记录写入数据库。

        或者甚至将信息写入本地文件(您选择的格式),然后将该文件一次性写入数据库(如果您想每 x 条记录或 y 分钟执行一次,则可以多次写入数据库。)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-09-21
          • 1970-01-01
          • 2012-06-17
          • 2012-06-07
          • 2018-01-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多