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