我有一个 sql server 2k8 数据库,每天要填充数十万条记录。
我目前正在编写一些代码,这些代码将调用数据库、检索 n 条记录、处理它们并将一些数据写回数据库。
我看到有两种方法(伪代码):
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();
}
基本上每批创建一个连接。第二种方法:
function xyz() {
conn = connection creation code
while(conn.open();) {
select next 1000 records
process each record
last record = true
}
conn.close();
xyz();
}
我很好奇什么是更好的做法。我觉得是后者,但它也将与我的数据库建立或多或少的永久/持久连接。我担心可能的内存溢出或类似的情况。
想法?
斯科特
最佳答案
ADO.Net Sqlclient 提供程序(我假设您将使用它,因为您说的是 C#)自动执行连接池,请参阅 SQL Server Connection Pooling (ADO.NET) .当您调用 Close 时,合并的连接并没有真正关闭,它们只是返回到池中。 “打开”和“关闭”池连接非常快。
不相关的注意事项:您应该将连接嵌入到 using
block 中:
using (SqlConnection conn = new SqlConnection(...))
{
conn.Open ();
...
}
这样可以避免在异常情况下泄漏连接。
关于c# - 持久数据库连接与打开和关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7302299/