2013-05-07 71 views
1

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

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

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

回答

3

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

它始终是最好立即

确实是一个具体的工作模式存在

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

using statement确保对象创建只是打开连接需要时,访问数据,关闭和处置的连接在开口处关闭并放置在闭合支架处。 即使在数据库代码中发生异常

这并不意味着您不能尝试优化您的代码。例如,您可以将几个站点地图集中在一起并一次性写入,但通常最好遵循一个简单的工作模式,尽快完成工作,并在稍后进行优化。

+0

这正是我所需要的。非常感谢。 – 2013-05-07 10:19:27

0

您可以用下面的代码工作:

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

希望这有助于!

0

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

祝你好运!

+0

看看史蒂夫的回答很好,我想你也应该使用它。 – 2013-05-07 10:20:21

+0

问题是如果你应该打开和关闭连接。不是如何去做。 – 2015-08-06 13:54:21

0

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

MSDN

注意建议您关闭数据库连接时 你为了使用完要返回 到连接池。这可以通过使用Connection对象的Close或Dispose 方法来完成。不明确 关闭的连接可能不会被添加或返回到池中。例如,如果已达到最大 池大小并且连接仍然有效,则已经超出范围但未明确关闭 的 连接将仅返回到连接池。

0

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

甚至写信息到本地文件(您所选择的格式),然后写一个文件到数据库中的一个镜头(或者多个镜头,如果你想这样做,每隔X记录或y分钟。)