Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 优化SQL连接性能?_C#_.net_Sql_Performance_Sqlconnection - Fatal编程技术网

C# 优化SQL连接性能?

C# 优化SQL连接性能?,c#,.net,sql,performance,sqlconnection,C#,.net,Sql,Performance,Sqlconnection,这不是优化SQL命令的问题。我想知道有什么方法可以确保SQL连接保持打开状态,并尽可能有效地处理命令 我现在看到的是,我可以执行一个SQL命令,该命令需要~1秒,额外的执行需要~300毫秒。这是在先前对SQL server(从另一个应用程序实例)执行命令之后。。。因此,在应用程序初始执行之前,应该为已执行的查询完全填充SQL缓存。只要我继续重新执行查询,我会看到大约300毫秒的时间,但是如果我让应用程序空闲5-10分钟并返回,下一个请求将返回到~1秒(与初始请求相同) 有没有一种方法可以通过连接

这不是优化SQL命令的问题。我想知道有什么方法可以确保SQL连接保持打开状态,并尽可能有效地处理命令

我现在看到的是,我可以执行一个SQL命令,该命令需要~1秒,额外的执行需要~300毫秒。这是在先前对SQL server(从另一个应用程序实例)执行命令之后。。。因此,在应用程序初始执行之前,应该为已执行的查询完全填充SQL缓存。只要我继续重新执行查询,我会看到大约300毫秒的时间,但是如果我让应用程序空闲5-10分钟并返回,下一个请求将返回到~1秒(与初始请求相同)


有没有一种方法可以通过连接字符串或SqlConnection上的某些属性来指导框架使连接保持湿润,并准备好有效地处理查询?

您可以通过不关闭连接来保持连接处于打开状态。:)但这是不可取的,因为连接池将为您处理连接管理。您是否启用了它?

您通过不关闭它来保持它的打开状态。:)但这是不可取的,因为连接池将为您处理连接管理。是否启用了该功能?

是否检查了程序的执行计划。我相信执行计划会加载到服务器上的内存中,然后在特定时间段后清除,或者取决于过程中访问的表等。我们曾经遇到过简化存储过程(可能是拆分存储过程)的情况减少数据库服务器在计算计划时必须完成的工作量…并最终减少过程的首次调用时间…您可以发出命令,强制存储过程每次重新编译,以测试您是否在减少初始调用时间。。。 我们曾经遇到过这样的情况:存储过程的复杂性使得数据库服务器不得不不断地根据不同的参数重新编译,这大大降低了它的速度,将SP拆分或将大型select语句简化为多个update语句等等,这些都有很大的帮助


其他想法可能是每隔一段时间间歇性地调用一个简单的getDate()或类似的函数,以使sql server处于唤醒状态(希望这是有意义的)…这与将asp.net应用程序保存在IIS内存中非常相似

您是否检查了程序的执行计划。我相信执行计划会加载到服务器上的内存中,然后在特定时间段后清除,或者取决于过程中访问的表等。我们曾经遇到过简化存储过程(可能是拆分存储过程)的情况减少数据库服务器在计算计划时必须完成的工作量…并最终减少过程的首次调用时间…您可以发出命令,强制存储过程每次重新编译,以测试您是否在减少初始调用时间。。。 我们曾经遇到过这样的情况:存储过程的复杂性使得数据库服务器不得不不断地根据不同的参数重新编译,这大大降低了它的速度,将SP拆分或将大型select语句简化为多个update语句等等,这些都有很大的帮助


其他想法可能是每隔一段时间间歇性地调用一个简单的getDate()或类似的函数,以使sql server处于唤醒状态(希望这是有意义的)…这与将asp.net应用程序保存在IIS内存中非常相似

默认情况下,连接池在ADO.NET中启用。这将通过应用程序使用的连接字符串实现。更多信息在

默认情况下,连接池在ADO.NET中启用。这将通过应用程序使用的连接字符串实现。更多信息请参见

如果您使用多个数据库连接,可能会更有效。只有一个数据库连接意味着最好的访问速度总是受到限制。而拥有>1个连接意味着编译器有机会进一步优化并发访问。我猜你在用.NET


此外,如果重复发出相同的SQL语句,则数据库服务器可能会在短时间内缓存结果,从而使结果集的返回速度更快。

如果使用多个数据库连接,则可能会更有效。只有一个数据库连接意味着最好的访问速度总是受到限制。而拥有>1个连接意味着编译器有机会进一步优化并发访问。我猜你在用.NET


此外,如果重复发出相同的SQL语句,则数据库服务器可能会在短时间内缓存结果,从而加快返回结果集的速度。

在.NET连接池中打开的连接的默认值为零

您可以将连接字符串中的此值调整为1或更多:

"data source=dbserver;...Asynchronous Processing=true;Min Pool Size=1"

请参阅有关这些的详细信息。

在.NET连接池中打开的连接的默认值为零

您可以将连接字符串中的此值调整为1或更多:

"data source=dbserver;...Asynchronous Processing=true;Min Pool Size=1"
了解更多关于这些的信息