從網上搜索一大堆,套路幾乎相同,但自己就是不行,怎麼也不行,為什麼不行呢?不行的話別人肯定不來坑博友了呀。然後放了一會,去拿下午茶回來,再次來看,恍然大悟,What?這麼簡單。 一開始代碼如下: helper.GetConnectionString(schoolStr);//獲取當前連接字元串 us ...
從網上搜索一大堆,套路幾乎相同,但自己就是不行,怎麼也不行,為什麼不行呢?不行的話別人肯定不來坑博友了呀。然後放了一會,去拿下午茶回來,再次來看,恍然大悟,What?這麼簡單。
一開始代碼如下:
helper.GetConnectionString(schoolStr);//獲取當前連接字元串
using (ConnectionBase conn = ConnectionManager.Instance.Pop())
{
if (conn.State != ConnectionState.Open)
conn.Open();
try
{
helper.GetConnectionString(schoolStr);//獲取當前連接字元串
var curSchoolInfo = schoolDAL.SelectDetail(schoolStr);
if (curSchoolInfo != null)
schoolInfoList.Add(curSchoolInfo);
}
finally
{
conn.Close();
conn.Dispose();
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
修改後代碼如下:
只要把紅色字體部分去掉,放到粉色字體部分就好了。
就是這麼簡單的問題,花了2個多小時折騰。
註意藍色字體部分代碼:
如果不加藍色字體部分代碼,錶面看著已經釋放了,實則不然,為什麼close()和Dispose()之後任然不能釋放與db文件的連接呢?問度娘,好幾個答案是:Close() ,Dispose() ,但還是不可以,再次問度娘,給出瞭如下答案:
原因是sqllite在執行 SQLiteConnectionHandle.Dispose()操作的時候,其實並沒有真正的釋放連接,只有顯示調用CLR垃圾回收之後才能真正釋放連接。