java – 关闭并重新打开Realm实例对性能有害吗?

当使用SQLite时,我通常每个应用程序都有一个SQLiteOpenHelper实例,我永远不会关闭它,因为它的数据库被许多其他类连续使用,关闭/重新打开它会更慢,更复杂.

现在我正在玩Realm,我打算只从Data Access Objects访问Realm实例.每次调用都将来自一个工作线程.

我一直在阅读这些示例,他们通常在每个Activity或后台任务中调用getInstance / close.由于Realm将数据保存在像SQLite这样的文件中,为每个操作调用getInstance / close是个好主意吗?调用close会实际关闭文件连接,从而使下一个getInstance调用变慢吗?我应该在应用程序级别缓存Realm实例并将其注入DAO吗?

Realm使用引用计数线程本地缓存优化的模式验证.这意味着只要在调用Realm.getInstance()的线程上至少打开一个实例,它就只是一个HashMap查找.

如果您在任何线程上打开了一个实例,我们就会跳过其他线程上的模式验证,即使它是在那里打开的第一个实例.

如果关闭给定Thread上的所有实例,我们将释放线程本地内存,并且需要为该线程上的下一个实例重新分配它.

如果关闭所有线程上的所有实例,您将有一个“冷启动”,这是最昂贵的,因为我们需要分配内存进行模式验证.

最佳做法是在您的线程存在时保持Realm实例处于打开状态.对于使用此处描述的模式最简单的UI线程:https://realm.io/docs/java/latest/#controlling-the-lifecycle-of-realm-instances

对于工作线程在开始时打开Realm实例并在退出时关闭它将是最佳的:

new Thread(new Runnable() {
  public void run() {
    Realm realm = Realm.getDefaultInstance();
    doWork(realm);
    realm.close();
  }
}).start();
翻译自:https://stackoverflow.com/questions/36429292/is-closing-and-reopening-realm-instances-bad-for-performance

转载注明原文:java – 关闭并重新打开Realm实例对性能有害吗?