慢 - 打开和关闭与 SQL 服务器的连接
Slow - Open and close connection to SQL Server
我在 Windows Azure 和 SQL Azure 上有一个 ASP.NET MVC 应用程序 运行。该应用程序使用 SqlClient 连接到数据库。我总是使用相同的 connectionString(使用连接池):
using (SqlConnection conn = new SqlConnection("Static Connection String"))
{
using (var command = conn.CreateCommand())
{
conn.Open();
return command.ExecuteNonQuery();
}
}
我注意到在打开连接之间有相当长的时间,导致执行缓慢。例如,如果我有一个包含四个选择列表的页面,应用程序需要打开连接四次才能填充列表。如果您使用一个命令执行此操作,返回所有列表,性能令人难以置信,但是当我打开和关闭连接以分别获取结果列表时,性能也会下降。
使用 windows 表单应用程序不会发生。
我的疑惑是,我所在的环境有什么限制吗运行?
问题是您执行了 4 个查询,而不是您打开了 4 个连接——您没有。连接池意味着您重复使用相同的连接。
不过您仍然需要向服务器发送请求,等待并检索答案。这是杀死性能的 4 次往返。无论如何,4 个查询将比单个查询慢 4 倍。如果检索的数据很小,往返开销比查询本身要昂贵得多。
您应该尝试减少数据库调用或完全消除它们:
- 使用批处理将多个查询合并为一个调用。
- 对查找数据使用缓存,这样您就不必一直检索相同的选择。
- 最后,如果请求参数未更改,请使用输出缓存来避免呈现同一页面。
我在 Windows Azure 和 SQL Azure 上有一个 ASP.NET MVC 应用程序 运行。该应用程序使用 SqlClient 连接到数据库。我总是使用相同的 connectionString(使用连接池):
using (SqlConnection conn = new SqlConnection("Static Connection String"))
{
using (var command = conn.CreateCommand())
{
conn.Open();
return command.ExecuteNonQuery();
}
}
我注意到在打开连接之间有相当长的时间,导致执行缓慢。例如,如果我有一个包含四个选择列表的页面,应用程序需要打开连接四次才能填充列表。如果您使用一个命令执行此操作,返回所有列表,性能令人难以置信,但是当我打开和关闭连接以分别获取结果列表时,性能也会下降。
使用 windows 表单应用程序不会发生。
我的疑惑是,我所在的环境有什么限制吗运行?
问题是您执行了 4 个查询,而不是您打开了 4 个连接——您没有。连接池意味着您重复使用相同的连接。
不过您仍然需要向服务器发送请求,等待并检索答案。这是杀死性能的 4 次往返。无论如何,4 个查询将比单个查询慢 4 倍。如果检索的数据很小,往返开销比查询本身要昂贵得多。
您应该尝试减少数据库调用或完全消除它们:
- 使用批处理将多个查询合并为一个调用。
- 对查找数据使用缓存,这样您就不必一直检索相同的选择。
- 最后,如果请求参数未更改,请使用输出缓存来避免呈现同一页面。