我正在将Foxpro迁移到ASP.NET MVC应用程序。的逻辑的连接太多Asp.net
近70%被嵌入在SqlServer的存储过程。出于这个原因,我们正在使用一些过程来更新某些表(我们不映射SP,只需使用SqlConnection和SqlDataReader,SqlCommand,SqlAddapter调用它们)。
问题是,每次通话都会打开很多连接。即使这样,每次通话都会关闭连接。当运行sp_who时,许多连接似乎为同一用户打开。
执行关闭和处理每个连接的当前方式是什么?
可以找到一个活动的连接并重用它?
最后的尝试是:
SqlConnection.ClearAllpools();
不过,这并不立即生效。 我们有一个执行连接的IDisposabel类连接。 这是de close方法:
public void close()
{
SqlConnection.ClearAllPools();
//.ClearPool(BdTransCx);
// SqlConnection.ClearPool(BdArchCx);
if (ConectarArchivos)
{
if (BdArchCx.State == ConnectionState.Open)
{
BdArchCx.Close();
}
}
if (BdArchCx.State == ConnectionState.Open)
{
BdTransCx.Close();
}
}
在每次请求后调用此方法。
关闭一旦你完成它的连接。看看[using-statement](http://msdn.microsoft.com/en-us/library/yh598w02.aspx)。连接池假定当你没有关闭连接时不能重用连接。请记住,关闭只是池的标志,实际上与数据库的连接保持打开状态,以便尽快重用。如果池中的每个连接都处于使用状态(打开),池会创建一个新的物理连接,这非常昂贵。它是否达到MaxPoolSize(默认值为100),你会得到你的例外。 – 2012-03-22 15:50:46
很tks。你正在谈论的关闭方法是SqlConnection.close()?或者必须是:using-statement? – 2012-03-22 15:58:22
假设'BdArchCx'是'SqlConnection':'BdArchCx。关闭()'在最后一个try/catch的块类似于'使用(VAR BdArchCx =新的SqlConnection(conString)){}''因为将using'调用'dispose'这隐含关闭连接。尽快处置实现“IDisposable”的每个对象是一种很好的做法。 – 2012-03-22 16:01:43