我最近更改了我的 Web 应用程序,以便为每个命令创建一个数据库连接,而不是创建一个连接并将其重用于所有命令。今天下午我使用了这段代码,我的数据库内存使用量高达 24GB,执行了大约 8k 次插入。我的代码是这样的(半伪代码):
public int ExecSQL(string SQLStr)
{
using (SqlConnection Con = new SqlConnection(MyConStr))
{
using (SqlCommand Cmd = new SqlCommand(SQLStr, Con))
{
return Cmd.ExecuteNonQuery();
}
}
}
using (TransactionScope TX = new TransactionScope(TransactionScopeOption.RequiresNew))
{
//Loop and perform 8000 x
int ID = ExecSQL("insert into something (column) output unique_id values ('data')").
// I also perform 1 or 2 selects per insert based on the ID returned from the insert. I don't use a .Supress for my inserts.
}
这会导致数据库内存使用率高吗?我的印象是它应该创建 100 个连接(默认)然后继续重复使用它,但我猜我错过了一些东西。
回答:运行以下SQL:
SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NumberOfConnections,
loginame as LoginName
FROM
sys.sysprocesses
WHERE
dbid > 0
GROUP BY
dbid, loginame
并且我的数据库只有一个打开的连接,所以这不会导致问题。现在想知道什么是..