Servicestack ORM db.Close() 不终止连接进程
Servicestack ORM db.Close() does not terminate the connection process
我有一个代码演示了与 ServiceStack ORM
的简单 mysql 数据库连接
var dbFactory = new OrmLiteConnectionFactory(DB_CONNECTION_STRING, MySqlDialect.Provider);
var db = dbFactory.Open();
Console.WriteLine(db.State.ToString());
db.Close();
db.Dispose();
结果
Open
但是当我点击 SQL 命令时
show full processlist;
Id User Host db Command Time State Info Rows_sent Rows_examined
81107052 user1 <111.21.96.32>:51120 my_db Sleep 7 NULL 0 0
81107178 user1 localhost my_db Query 0 init show full processlist 0 0
81107179 user1 localhost my_db Sleep 0 NULL 0 0
id 为 81107052
的进程是开始执行代码的进程,但是进入睡眠状态并且不会被 db.Close() 终止;
这会触发 <max_connections_reached>
并行应用程序使用错误。
那么如何关闭连接进程呢?
只需使用 using 语句,即:
using (var db = dbFactory.Open())
{
}
一些 RDBMS 提供程序将 return 连接到池而不是将其关闭,但如果正确处理所有连接,您将不会收到太多打开的连接错误。
需要在连接字符串中添加Pooling=false
我有一个代码演示了与 ServiceStack ORM
的简单 mysql 数据库连接var dbFactory = new OrmLiteConnectionFactory(DB_CONNECTION_STRING, MySqlDialect.Provider);
var db = dbFactory.Open();
Console.WriteLine(db.State.ToString());
db.Close();
db.Dispose();
结果
Open
但是当我点击 SQL 命令时
show full processlist;
Id User Host db Command Time State Info Rows_sent Rows_examined
81107052 user1 <111.21.96.32>:51120 my_db Sleep 7 NULL 0 0
81107178 user1 localhost my_db Query 0 init show full processlist 0 0
81107179 user1 localhost my_db Sleep 0 NULL 0 0
id 为 81107052
的进程是开始执行代码的进程,但是进入睡眠状态并且不会被 db.Close() 终止;
这会触发 <max_connections_reached>
并行应用程序使用错误。
那么如何关闭连接进程呢?
只需使用 using 语句,即:
using (var db = dbFactory.Open())
{
}
一些 RDBMS 提供程序将 return 连接到池而不是将其关闭,但如果正确处理所有连接,您将不会收到太多打开的连接错误。
需要在连接字符串中添加Pooling=false