closures并重新打开Realm实例对性能不利?

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

现在,我正在与Realm玩弄,并计划只从数据访问对象访问Realm实例。 每个调用将从一个工作者线程进行。

我一直在读例子,他们通常调用getInstance /closures每个活动或后台任务。 由于Realm将数据保存在像SQLite这样的文件中,为每个操作调用getInstance / close是个好主意吗? 我的意思是,将调用close实际closures文件连接,从而使下一个getInstance调用更慢? 我应该在应用程序级caching一个Realm实例,然后将其注入到DAO中吗?

  • 如何将JSON数据存储到Realm中并将其显示到recyclerview中
  • Android:Realm + Retrofit 2 + Gson
  • 结合Realm.io和Firebase
  • 在Realm Android中使用List <String>的最佳方式是什么?
  • 限制使用Parse的呼叫数量
  • Android领域 - 使用意图传递领域对象
  • List <String>的Gson反序列化为realmList <RealmString>
  • 与领域构build错误
  • Realm使用引用计数的线程本地caching+优化的模式validation。 这意味着只要至less有一个实例在一个调用Realm.getInstance()的线程上打开,这只是一个HashMap查找。

    如果您在任何线程上打开了一个实例,那么即使它是在此处打开的第一个实例,我们也会跳过其他线程上的架构validation。

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

    如果closures所有线程上的所有实例,将会有一个“冷启动”,这是最昂贵的,因为我们需要分配内存+进行模式validation。

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

    对于在开始时打开Realm实例的工作线程,在退出时将其closures将是最优化的:

     new Thread(new Runnable() { public void run() { Realm realm = Realm.getDefaultInstance(); doWork(realm); realm.close(); } }).start();