2017-04-15 90 views
1

我在Xamarin.Forms中使用Realm来构建移动应用程序,并且对关闭xamarin领域有一些疑问。在xamarin中处置领域

以下是更新的境界

public void updateData(EventType e) 
     { 

       Realm realm = Realm.GetInstance(); 
       realm.WriteAsync(tempRealm => 
       { 

        tempRealm.Add(e.response, true); 
       }); 

       realm.Dispose(); 

       MessagingCenter.Send<IMessage, EventType>(this, RestApi.UI_EVENT, e); 


     } 
  1. 我们需要调用realm.Dispose(),每次当我们调用Realm.GetInstance();记录的方法是什么?
  2. WriteAsync是否负责关闭/处理领域?
  3. 我是否需要使用await再次使用realm.WriteAsync作为其异步方法。

回答

1

每当我们调用Realm.GetInstance时,我们是否需要每次调用realm.Dispose()?

是的。最后你应该Dispose在你不再使用它们的Realm实例上。这将释放所有消耗的资源(本地和受管)。

通常我在应用程序的生命周期中(在每个平台的应用程序生命周期之后)保持UI线程实例处于打开状态。即我将这个Realm实例看作HttpClient实例,这是一个可以从中打开其他实例的应用程序级单例。现在我做开放和后台线程情况下处置时,我通过更新服务,广播接收器,推送更新,等等

注意数据库:请记住,如果你是一个背景线程,并获得多个领域在该线程上的相同RealmConfigurationBase的实例,它们实际上将全部是相同的Realm实例(Realm.IsSameInstance)。您可以在每个调用Dispose而不是实际上关闭Realm.IsClosed)实例,直到该线程上的所有实例都被处置。

WriteAsync是否负责关闭/处理领域?

是的。您不想在传递到您的lamba函数的Realm实例上调用Dispose

事实上,如果你这样做,你将收到System.ObjectDisposedException,因为Realm已经用事务块包装了该lamba,并且在事务已被提交或回滚之前已经处理了领域实例。

我必须使用await对realm.WriteAsync作为其异步方法。

参考许多其他SO关于消防&忘记异步方法调用,即:Why do I have to use await for a method to run asynchronously. What if I don't want to wait for the method to finish before continuing?