[英]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.