2014-01-25 75 views
11

我正在使用sqlite-net異步API來編寫Windows Phone應用程序。在編寫單元測試以確保我的適配器到sqlite-net API正確創建文件時,我注意到適配器即使在超出範圍之後仍繼續保持文件句柄。是否支持sqlite-net異步API支持?

異步連接類(SQLiteAsyncConnection)不支持IDisposable,因此我無法手動處理它。看看源代碼,似乎async API會創建一個連接,使用它並每次處置它。但是,當我的測試清理代碼嘗試刪除創建的測試數據庫時,其他一些資源仍然保留在其上。

+0

如果是這種情況,也許你只需要在嘗試刪除之前調用GC.Collect()。不過,我自己並沒有看到這種行爲。 :-( – Gordon

+0

十幾年前,他們已經知道不要調用GC.Collect()手動http://blogs.msdn.com/b/ricom/archive/2003/12/02/two-things-to-avoid -for-better-memory-usage.aspx :) –

回答

3

我在情況完全一樣的問題,即應該數據庫通過電子郵件進行調試/分析的目的發送。沒有辦法做到這一點,因爲舉行連接。

您可以通過修改源碼,網實現的位去解決這個問題。

在下面的部分類聲明SQLiteAsync.cs附加的頂部。

namespace SQLite 
{ 
    public partial class SQLiteAsyncConnection 
    { 
     public void ResetConnections() 
     { 
      SQLiteConnectionPool.Shared.Reset(); 
     } 
    } 
} 

,然後改變上述Reset方法的訪問修飾符作爲public

在應用程序代碼刪除數據庫文件之前,只需調用<YourSQLiteAsyncConnection>.ResetConnections();


再次,當測試時,你可以在內存中創建你的數據庫,所以你根本不必刪除它。您可以通過將DatabasePath設置爲":memory:"來實現此目的。