C# MySql ADO.NET:Close()保持连接打开
我正在本地进行一些测试,因为我在.NET上使用Entity Framework时遇到了一些严重的问题(很多块、并发问题等),所以我决定从底层开始分析Ado.NET连接 我正在调试我的代码,同时,我正在使用MySql Workbench检查打开的连接 我正在调试的代码是下一个代码:C# MySql ADO.NET:Close()保持连接打开,c#,mysql,.net,ado.net,connection,C#,Mysql,.net,Ado.net,Connection,我正在本地进行一些测试,因为我在.NET上使用Entity Framework时遇到了一些严重的问题(很多块、并发问题等),所以我决定从底层开始分析Ado.NET连接 我正在调试我的代码,同时,我正在使用MySql Workbench检查打开的连接 我正在调试的代码是下一个代码: using (var con = new MySqlConnection(_connectionString)) { con.Open(); //thi
using (var con = new MySqlConnection(_connectionString))
{
con.Open();
//this extension method is because i am using the Dapper Library
var products = con.Query<Product>("Select productId, name from products");
con.Close();
}
执行open()方法后,连接打开(命令:Sleep)
之后,在command:sleep中连接仍然打开。如何避免这种情况?因为它会保持连接打开,直到我杀死IIS实例。。。这对并发性不是很好。。。因为如果有很多用户在数据库中检索数据,如果他们没有对数据库执行任何操作,我不希望打开很多连接
如何改进这一点?MySQL connector具有这种行为以获得更好的性能。这些连接正在休眠,以防您再次需要它们。为每个请求删除和创建新连接的成本非常高。@ArielScherman保持连接打开有助于重用连接,而无需为每个用户重新创建另一个连接。您的代码很好,因为它释放了NET MySqlConnection对象,但ADO.NET连接池使非托管连接资源保持打开状态,并准备好为其他用户提供服务,而无需使用其他非托管资源创建另一个对象。重要的是using语句(您还可以删除对Close的调用,因为end using大括号将关闭它)
con.Open();
var products = con.Query<Product>("Select productId, name from products");
con.Close();