因此,我已经阅读了一堆链接/ SO问题,但是我仍然无法获得明确的答案。
[在ASP.NET应用程序中使用Dapper执行SQL查询时,打开/关闭连接的最佳实践是什么?
这是我当前遵循的模式:
using (var db = new SqlConnection(_connectionString))
{
return db.Query("dbo.SomeQuery");
}
基本上,每次根据需要打开/关闭一个SQL连接。
根据我的理解,以上代码应自动打开/关闭SQL连接(例如,我不需要显式执行db.Open
或db.Close
)。
我看到的问题是一段时间后,我收到了很多这样的错误:
InvalidOperationExceptionTimeout已过期。超时时间已过从池中获取连接之前。这可能发生了因为所有池化连接都在使用中,最大池大小为到达。
在此期间,我进行了SQL事件探查器跟踪,并且没有看到任何长查询会阻塞任何内容,因此,好像我的ASP.NET Web应用程序用尽了连接(而不是将太久而无法执行查询)。
有人可以告诉我我在做什么错吗?
旁注:我的应用程序作为Azure Web App运行,因此很遗憾,我无法真正看到该Web应用程序正在打开多少连接。 :(
根据我的观点,使用语句来关闭您的连接,但您明确地告诉您打开这样的连接:
using (var db = new SqlConnection(_connectionString))
{
db.open();
return db.Query("dbo.SomeQuery");
}
使用块将处理资源管理,因此您不需要手动关闭连接,除了手动关闭连接还会阻止连接池并降低性能。