2017-05-17 11 views
1

我有這表明與ServiceStack ORMServicestack ORM db.Close()不會終止連接過程

var dbFactory = new OrmLiteConnectionFactory(DB_CONNECTION_STRING, MySqlDialect.Provider); 
var db = dbFactory.Open(); 
Console.WriteLine(db.State.ToString()); 
db.Close(); 
db.Dispose(); 

結果簡單的mysql數據庫連接

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 

該過程與編號81107052是過程whic h從代碼執行開始,但是進入睡眠狀態,不會以db.Close()終止。 這會觸發<max_connections_reached>並行應用程序使用錯誤。

那麼如何關閉連接過程?

回答

0

添加Pooling=false需要連接字符串

1

只需使用using語句,即:

using (var db = dbFactory.Open()) 
{ 
} 

一些RDBMS提供商將返回到連接池,而不是將其關閉,但如果所有的連接,你不會得到太多打開的連接錯誤妥善處置。

+0

沒有運氣,仍然是同樣的問題依然存在! – dexterslab

+0

@dexterslab也許它是在你的代碼中的其他地方,你沒有正確處理數據庫連接,也無法與其他線程共享數據庫連接,每個線程都需要解析和處理他們自己的連接。 – mythz

+0

'@mythz在連接字符串中添加'Pooling = false'解決了http://stackoverflow.com/questions/5567097/using-mysqlconnection-in-c-sharp-does-not-close-properly中描述的問題 – dexterslab