【发布时间】:2011-06-13 20:04:57
【问题描述】:
我有一个长时间运行的服务,有几个线程每秒调用以下方法数百次:
void TheMethod()
{
using (var c = new SqlConnection("..."))
{
c.Open();
var ret1 = PrepareAndExecuteStatement1(c, args1);
// some code
var ret2 = PrepareAndExecuteStatement2(c, args2);
// more code
}
}
PrepareAndExecuteStatement 是这样的:
void PrepareAndExecuteStatement*(SqlConnection c, args)
{
var cmd = new SqlCommand("query", c);
cmd.Parameters.Add("@param", type);
cmd.Prepare();
cmd.Parameters["@param"] = args;
return cmd.execute().read().etc();
}
我想重用准备好的语句,为每个连接准备一次并执行它们直到连接中断。我希望这会提高性能。
我可以使用内置的连接池来实现吗?理想情况下,每次建立新连接时,应自动准备所有语句,并且我需要访问这些语句的 SqlCommand 对象。
【问题讨论】:
-
我不明白你所说的“直到连接中断”是什么意思,以及在调用不同的准备好的语句之间究竟应该发生什么。
-
这完全取决于
// some code是什么! -
如果有人重新启动 SQL Server,现有的连接将会中断。
-
在“一些代码”上,我处理语句的结果。
-
结果集的大小是多少?如果是较小的结果集,您可能希望使用 SqlDataReader。此外,默认情况下启用连接池。当您打开()或关闭()连接时,您只是从池中获取或返回池。
标签: c# .net sql sql-server