[英]When .NET runtime closes (My)SQL connections from connection pool
我最近閱讀了有關連接池的信息( msdn , mysql文檔 )。
連接池的目的是不要強迫MySQL客戶端不斷進行連接和斷開連接。 因此,當連接的用戶不再需要連接時,可以將連接緩存在MySQL客戶端中。 因此,另一個需要連接到同一MySQL Server的用戶可以稍后再使用此緩存的連接(由Mikael Ronstrom撰寫)。
這意味着:
我用以下代碼進行了測試:
MySqlConnection conn = new MySqlConnection("server=localhost;uid=user;pwd=pass;database=dbname;Pooling=true");
try
{
conn.Open();
Console.WriteLine("Connected to sql server");
}
catch (MySqlException e)
{
Console.WriteLine("Error connecting to sql server ["+e.Message+"]");
}
MySqlCommand cmd = new MySqlCommand("select * from table1 where id = 1", conn);
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
string a = reader.GetString(0);
}
reader.Close();
try
{
conn.Close();
}
catch (MySqlException e) {}
// I connected to MySQL server via terminal and executed 'show full processlist'
// connection was still present
// If I add MySqlConnection.ClearAllPools(); connection was closed (everything as it should)
.NET運行時此時會調用連接器MySqlConnection.ClearAllPools();。 或MySqlConnection.ClearPool()靜態方法? 這些方法實際上關閉了與MySQL服務器的連接。 如果.NET應用程序崩潰,在wait_timeout過去之后,MySQL連接是否關閉,該怎么辦? 我應該在應用程序執行結束時(最后一行)調用ClearAllPool()嗎?
從您指定的MSDN鏈接
如果指定的MinPoolSize大於零,則直到AppDomain卸載並且過程結束,連接池才會被銷毀。
進一步
當發生致命錯誤(例如故障轉移)時,池將自動清除。
這樣,當應用程序退出時,連接將被清除。
您應該能夠通過以下方式進行測試:建立連接,使用close()
方法驗證其是否仍處於打開狀態,然后導致應用程序崩潰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.