我正在编写一个生成站点地图的程序。为了避免重复,我使用 MSSQL Server 来存储找到的链接。在这个过程中可能会读写数百万个链接,读写过程之间的间隔可能很小(我的意思是每次访问数据库之间的时间很短)。
我想知道我是否可以在程序启动时打开连接并在最后关闭它。请考虑创建一些站点地图可能需要几天时间才能完成。或者每次我想访问数据库时打开和关闭连接是否明智?
顺便说一句,我在本地使用 sql server。
我正在编写一个生成站点地图的程序。为了避免重复,我使用 MSSQL Server 来存储找到的链接。在这个过程中可能会读写数百万个链接,读写过程之间的间隔可能很小(我的意思是每次访问数据库之间的时间很短)。
我想知道我是否可以在程序启动时打开连接并在最后关闭它。请考虑创建一些站点地图可能需要几天时间才能完成。或者每次我想访问数据库时打开和关闭连接是否明智?
顺便说一句,我在本地使用 sql server。
您的问题的答案是连接池功能。
总是最好在需要时打开连接,访问您的数据,立即关闭并释放连接
确实存在特定的工作模式
using(SqlConnection con = new SqlConnection(.....))
{
... do your work with the database here ....
}
using 语句确保在开口处创建的对象是闭合的并被放置在闭合大括号处。即使数据库代码中发生异常。
这并不意味着您不能尝试优化您的代码。例如,您可以将几个站点地图收集在一起并一次性编写它们,但通常最好遵循简单的工作模式,尽快完成工作并担心以后的优化。
如果您知道这需要一段时间,那么写入本地数据表,然后当您达到阈值时,将所有记录写入数据库。
或者甚至将信息写入本地文件(您选择的格式),然后将该文件一次性写入数据库(如果您想每 x 条记录或 y 分钟执行一次,则可以多次写入。)
您可以使用以下代码:
SqlConnection conn;
try
{
conn = new SqlConnection(_dbconnstr));
}
catch
{
//exceptions are bubbled
throw;
}
finally
{
//Dispose is always called
conn.Dispose();
}
希望这可以帮助!
我通常每次使用它时都会打开和关闭连接。当周围有很多连接时,必须释放资源。如果你是唯一的一个,你可能会保留你的资源。请注意设置超时连接。
祝你好运!
最好打开/关闭连接。将连接打开没有任何好处。ADO.NET 连接池(默认开启)将负责关闭哪个连接以及何时关闭。
来自MSDN
注意 建议您在使用完连接后始终关闭连接,以便将连接返回到池中。这可以使用 Connection 对象的 Close 或 Dispose 方法来完成。未明确关闭的连接可能不会添加或返回到池中。例如,一个超出范围但没有显式关闭的连接只有在达到最大池大小并且连接仍然有效时才会返回到连接池。