在 xamarin 中配置领域

disposing realm in xamarin

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

以下是realm更新记录的方法

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.GetInstance(); 时都需要调用 realm.Dispose() ?
  2. WriteAsync 是否负责 closing/disposing 领域?
  3. 我是否必须使用 await againts realm.WriteAsync 作为异步方法。

Do we need to call realm.Dispose() everytime whenever we call Realm.GetInstance?

是的。最终,当您不再使用它们时,您应该 应该 Dispose 在您的 Realm 实例上。这将释放所有消耗的资源(本机和托管)。

通常 我在应用程序的生命周期内(在每个平台的应用程序生命周期之后)保持一个 UI 线程实例打开。即,我将此 Realm 实例视为 HttpClient 实例,您可以从中打开其他实例的应用程序级单例。现在,当我通过服务、广播接收器、推送更新等更新数据库时,我会在后台线程上打开和处理实例……

注意:请记住,如果您在 background 线程上并在该线程上获取相同 RealmConfigurationBase 的多个 Realm 实例,它们实际上都是同一个 Realm实例(Realm.IsSameInstance)。您可以在每个实例上调用 Dispose 而不是实际 close (Realm.IsClosed) 实例,直到该线程上的所有 instances 都被释放.

Does WriteAsync takes care of closing/disposing realm?

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

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

Do i have to use await against realm.WriteAsync as its an asynchronous method.

参考许多其他关于 fire&forget 异步方法调用的 SO,即: