簡體   English   中英

使用MvvmCross和SQLite插件配置連接的最佳方法是什么

[英]What is the best way to Dispose the connection with MvvmCross and the SQLite Plugin

我想知道MvvmCross容器是否可以處理SQLite連接,或者是否應該在存儲庫中手動完成。

我見過如下代碼示例,它們不會手動處理或關閉SQLite連接:

public class ExampleRepository
{
    private readonly ISQLiteConnection _connection;

    public ExampleRepository(ISQLiteConnectionFactory factory)
    {
        _connection = factory.Create("Example.db");
        _connection.CreateTable<Example>();
    }

    public IEnumerable<Example> All()
    {
        return _connection.Table<Example>().ToList();
    }
}

這會是一個更好的選擇嗎?

public class ExampleRepository
{
    private readonly ISQLiteConnectionFactory _factory;

    public ExampleRepository(ISQLiteConnectionFactory factory)
    {
        _factory = factory;
    }

    public IEnumerable<Example> All()
    {
        using (var connection = _factory.Create("Example.db"))
        {
            connection.CreateTable<Example>();
            return connection.Table<Example>().ToList();
        }
    }
}

每次在存儲庫中使用時,使用using塊來處理連接會更好嗎?

或者繼續創建和部署連接是否需要更多開銷。 因此,在第一個例子中保持開放的原因是什么?

在實例化任何IDisposable對象時,您可以using語句執行此操作。 任何時間執行從范圍返回using ,該對象將被設置。 這包括退貨和例外。

using (var obj = new Connection()) {
    throw new Exception("This will dispose of obj");
}

當你構建一個需要像你這樣的持久IDisposable對象的類時,你也應該創建自己的類IDisposable ,並在Dispose()方法中處理這些對象:

public class MyClass : IDisposable
{
    Connection con = new Connection();
    public void Dispose()
    {
        con.Dispose();
    }
}

然后,當您實例化自己的類時,使用using ,並且在適當的時候將很樂意處理所有內容。

using (var obj = new MyClass()) {
    throw new Exception("This will dispose of obj, and obj.con");
}

最終,后一種解決方案是最好的,因為:

  • 您在必要時創建資源
  • 有效地重用它們
  • 並正確處理它們

每次在存儲庫中使用時,使用using塊來處理連接會更好嗎?

是的using{}塊(對於實現IDisposable接口的類)總是好的,因為它將確保object在離開塊時將被處理掉。

using (var connection = _factory.Create("Example.db"))
    {
        connection.CreateTable<Example>();
        return connection.Table<Example>().ToList();
    }//dispose here

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM