该代码具有误导性。在大多数情况下,您实际上并不是在创建 new 连接。默认情况下,除非您明确指示不启用连接,否则pooling会被启用。
我不能100%地确定缓冲池背后的确切条件,但是要点是,如果您在代码中快速重用相同的连接字符串,那么缓冲池实际上只能创建一个从您的应用程序到SQL Server的连接,而不是每次执行new SqlConnection
并打开它时都创建一个新连接。
通过处置连接,您基本上是在发出特定使用已完成的信号。...因此维护池的逻辑可以知道您已完成该特定连接。再次,我不知道确切地实现池化的方式,但是我想它在内部跟踪从您的代码建立了多少连接,以便它可以决定是否保持与SQL Server的实际连接打开。
,
有同样的问题并以这种方式实施。这将在 DI 处注册为 Transient Service
public class GenericRepository<T> : IGenericRepository<T>,IDisposable where T: class
{
private readonly IDbConnection connection;
public GenericRepository()
{
connection = new SqlConnection(ConfigurationManager.ConnectionStrings["Default"]);
connection.Open();
}
public virtual T QueryFirstOrDefault<T>(string sql,object parameters = null)
{
return connection.QueryFirstOrDefault<T>(sql,parameters);
}
public void Dispose()
{
connection.Close();
connection.Dispose();
}
}
本文链接:https://www.f2er.com/3149176.html