我有一个sql server 2k8数据库,每天填充数十万条记录.
我正在编写一些代码,它们将调用db,检索n条记录,处理它们,并将一些数据写回db.
我有两种方法可以做到这一点(伪代码):
function xyz() {
conn = conn creation code
conn.open();
while(not last record) {
select next 1000 records
process each record
last record = true
}
conn.close();
xyz();
}
Run Code Online (Sandbox Code Playgroud)
基本上每批创建一个连接.第二种方法:
function xyz() {
conn = connection creation code
while(conn.open();) {
select next 1000 records
process each record
last record = true
}
conn.close();
xyz();
}
Run Code Online (Sandbox Code Playgroud)
我很好奇什么是更好的做法.我觉得它是后者,但它也会与我的数据库建立一个或多或少的永久/持久连接.我担心可能的内存超支或其他一些问题.
思考?
斯科特
ADO.Net Sqlclient提供程序(我假设您将使用,因为您说是C#)自动执行连接池,请参阅SQL Server连接池(ADO.NET).当您调用Close时,池连接不会真正关闭,它们只是返回池中.'开放'和'关闭'汇集连接非常快.
不相关的说明:你应该在一个using块中嵌入你的连接:
using (SqlConnection conn = new SqlConnection(...))
{
conn.Open ();
...
}
Run Code Online (Sandbox Code Playgroud)
这样可以避免在异常情况下泄漏连接.