【发布时间】:2011-06-01 11:08:56
【问题描述】:
我正在开发一个文本分析桌面应用程序,它集中查询本地数据库 (MSSQLCE 3.5)。当用户输入文本时,它应该会实时做出反应,因此我将 ADO.NET 与纯 SQL 结合使用并尝试获得最佳性能结果。
问题是:根据我的任务,我应该保留一个缓存连接(作为静态变量或单例)并使用CommandBehavior.Default 进行查询,还是应该为每个查询建立一个新连接并指定CommandBehavior.CloseConnection?
我知道通常建议尽快关闭连接,但如果每分钟可能有数千个查询,例如当用户粘贴大量文本时,我真的应该这样做吗?
到目前为止,应用程序在 CloseConnection 上工作。现在我尝试将其转换为 CommandBehavior.Default 与单个连接。我可以看到一些小的性能加速,此时看不到任何问题,但我想知道在部署之前是否有任何附加条件。
// one cached connection for all queries
private static DbConnection _connection = null;
public static String MakeQuery()
{
if (_connection == null)
{
_connection = new SqlCeConnection(...);
_connection.Open();
}
var cmd = new SqlCeCommand("...", _connection);
using (var reader = cmd.ExecuteReader(CommandBehavior.Default))
{
}
}
对比
// new connection for each query
public static String MakeQuery()
{
using (var connection = new SqlCeConnection(...))
{
connection.Open();
var cmd = new SqlCeCommand("...", connection);
using (var reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
...
}
}
}
【问题讨论】:
标签: c# .net sql ado.net sql-server-ce