在 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);
}
- 是否每次调用
Realm.GetInstance();
时都需要调用 realm.Dispose() ?
- WriteAsync 是否负责 closing/disposing 领域?
- 我是否必须使用
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,即:
我正在 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);
}
- 是否每次调用
Realm.GetInstance();
时都需要调用 realm.Dispose() ? - WriteAsync 是否负责 closing/disposing 领域?
- 我是否必须使用
await
againtsrealm.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,即: