我有一个 Web API,其中包含 C# 中的数据库插入逻辑 (ado.net)。当多个用户(例如 100 个用户)调用 Web API 时,每次都会针对多个请求打开和关闭 SQL Server 连接。它会降低性能。
如何为多个请求保持单个 SQL Server 连接处于活动状态?我必须保持 SQL 连接仅打开一次并在一段时间后关闭,以便在此期间它应该考虑多个请求并在数据库中插入记录。
请建议。
ADO.NET的SqlConnection
正在实现一个连接池。
这意味着当您关闭或处置一个实例时SqlConnection
,底层连接只是返回到池中。当另一个实例SqlConnection
打开,并且连接池中有可用连接,将使用该连接。
事实上,微软文档页面SQL Server 连接池 https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling明确指出:
Caution
我们强烈建议您在使用完连接后始终关闭连接,以便连接返回到池中。您可以使用 Connection 对象的 Close 或 Dispose 方法,或者通过在 C# 中的 using 语句或 Visual Basic 中的 using 语句内打开所有连接来执行此操作。未显式关闭的连接可能不会添加或返回到池中。有关详细信息,请参阅使用语句或如何:处置 Visual Basic 的系统资源。
这意味着使用的最佳实践方法SqlConnection
这是:
using(var con = new SqlConnection(connectionString))
{
// your sql stuff goes here...
}
BTW, SqlCommand
, SqlDataReader
and SqlDataAdapter
还实施了IDisposable
接口,因此它们也需要在上下文中使用using
陈述:
using(var con = new SqlConnection(connectionString))
{
using(var cmd = new SqlCommand(sql, con))
{
// prepare command here - parameters and stuff like that
// either
using(var reader = cmd.ExecuteReader())
{
}
// or
using(var adapter = new SqlDataAdapter(cmd))
{
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)