关闭并重新打开 Realm 实例是否会影响性能?

2024-01-06

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

现在我正在研究 Realm,并且计划仅从数据访问对象访问 Realm 实例。每个调用都将从工作​​线程进行。

我一直在阅读这些示例,它们通常为每个活动或后台任务调用 getInstance/close 。由于 Realm 像 SQLite 一样将数据保存在文件中,因此为每个操作调用 getInstance/close 是一个好主意吗?我的意思是,会打电话close实际上关闭文件连接,从而进行下一个getInstance打电话慢点?我应该在应用程序级别缓存 Realm 实例并将其注入 DAO 中吗?


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

如果您有一个实例打开any线程中,我们会跳过其他线程上的架构验证,即使它是在那里打开的第一个实例。

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

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

最佳实践是只要线程存在,就保持 Realm 实例处于打开状态。对于使用此处描述的模式最容易完成的 UI 线程:https://realm.io/docs/java/latest/#controlling-the-lifecycle-of-realm-instances 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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关闭并重新打开 Realm 实例是否会影响性能? 的相关文章

  • Android 版 Robotium - solo.searchText () 不起作用

    我在使用 Robotium 时遇到 searchText 函数问题 我正在寻找这个字符串
  • 无法理解 Java 地图条目集

    我正在看一个 java 刽子手游戏 https github com leleah EvilHangman blob master EvilHangman java https github com leleah EvilHangman b
  • 在具有相同属性名称的不同数据类型上使用 ModelMapper

    我有两节课说Animal AnimalDto我想用ModelMapper将 Entity 转换为 DTO 反之亦然 但是对于具有相似名称的一些属性 这些类应该具有不同的数据类型 我该如何实现这一目标 动物 java public class
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 使用 Matrix.setPolyToPoly 选择位图上具有 4 个点的区域

    我正在 Android 上使用位图 在使用 4 个点选择位图上的区域时遇到问题 并非所有 4 点组都适合我 在某些情况下 结果只是一个空白位图 而不是裁剪后的位图 如图所示 并且 logcat 中没有任何错误 甚至是内存错误 这是我用来进行
  • Android 设备上的静默安装

    我已经接受了一段时间了 在 Android 上静默安装应用程序是不可能的 也就是说 让程序安装捆绑为 APK 的应用程序 而不提供标准操作系统安装提示并完成应用程序安装程序活动 但现在我已经拿到了 Appbrain 快速网络安装程序的副本
  • 将多模块 Maven 项目导入 Eclipse 时出现问题 (STS 2.5.2)

    我刚刚花了最后一个小时查看 Stackoverflow com 上的线程 尝试将 Maven 项目导入到 Spring ToolSuite 2 5 2 中 Maven 项目有多个模块 当我使用 STS 中的 Import 向导导入项目时 所
  • 当手机旋转(方向改变)时如何最好地重新创建标记/折线

    背景 开发一个使用 Android Google Map v2 的本机 Android 应用程序 使用android support v4 app FragmentActivity 在 Android v2 2 上运行 客观的 在更改手机方
  • Android - 将 ImageView 保存到具有全分辨率图像的文件

    我将图像放入 ImageView 中 并实现了多点触控来调整 ImageView 中的图像大小和移动图像 现在我需要将调整大小的图像保存到图像文件中 我已经尝试过 getDrawingCache 但该图像具有 ImageView 的大小 我
  • 如何在 Maven 中显示消息

    如何在 Maven 中显示消息 在ant中 我们确实有 echo 来显示消息 但是在maven中 我该怎么做呢 您可以使用 antrun 插件
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • SharedFlow 和 StateFlow 的主要区别

    两者有什么区别共享流 and 状态流 以及如何使用这些MVI建筑学 使用简单更好吗Flow或者这些作为状态和事件 Flow 是冷的 意味着它仅在收集数据时才发出数据 另外Flow不能保存数据 可以把它看成是水在里面流动的管道 Flow中的数
  • 使用 Espresso 检查 EditText 的字体大小、高度和宽度

    如何使用 Espresso 检查 EditText 的字体大小 高度和宽度 目前要分割我使用的文本 onView withId R id editText1 perform clearText typeText Amr 并阅读文本 onVi
  • 如何配置eclipse以保持这种代码格式?

    以下代码来自 playframework 2 0 的示例 Display the dashboard public static Result index return ok dashboard render Project findInv
  • 查看Jasper报告执行的SQL

    运行 Jasper 报表 其中 SQL 嵌入到报表文件 jrxml 中 时 是否可以看到执行的 SQL 理想情况下 我还想查看替换每个 P 占位符的值 Cheers Don JasperReports 使用 Jakarta Commons
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • 为什么Android的ImageReader类这么慢?

    我尝试了适用于 Android 3 4 1 的全新 OpenCVJavaCamera2View但它太慢了 仅显示相机视图约 15 fps 当我尝试较旧的JavaCameraView相反 它给了我很好的结果 30fps 这是我相机的极限 我想
  • 找到 Android 浏览器中使用的 webkit 版本?

    有没有办法知道某些特定手机上的 Android 浏览器使用的是哪个版本的 webkit 软件 如果有一个您可以浏览以获取该信息的 URL 那就太好了 但任何其他方式也很好 如果你知道 webkit 版本 你就知道 html5 支持多少 至少
  • Swagger/Openapi-Annotations:如何使用 $ref 生成 allOf?

    我正在生成 Rest 端点 包括添加OpenAPI Swagger对生成的代码进行注释 虽然它对于基本类型运行得很好 但我在自定义类方面遇到了一些问题 现在我有很多自定义类的重复架构条目 使用 Schema 实现 MyClass class
  • 在 Google 地图上绘制线条/路径

    我很长一段时间都在忙于寻找如何在 HelloMapView 中的地图上的两个 GPS 点之间画一条线 但没有运气 谁能告诉我该怎么做 假设我使用扩展 MapView 的 HelloMapView 我需要使用叠加层吗 如果是这样 我是否必须重

随机推荐

  • 当浏览器关闭时运行服务器端功能

    背景 我正在使用 C 代码隐藏创建一个非常简单的类似聊天室的 ASP NET 页面 当前用户 聊天消息显示在位于 AJAX 更新面板内的控件中 并使用计时器 它们每隔几秒从数据库中提取信息 我试图找到一种简单的方法来处理将用户退出浏览器时的
  • 如何避免从闭包中访问可变变量

    我有一些这样的代码 for var id 0 id lt message receiver length id var tmp id id zlib gzip JSON stringify message json function err
  • CameraUpdateFactory.newLatLngBounds 始终不工作

    我在 Android 谷歌地图上移动相机时遇到一些问题 我有这个功能 protected void centralizeMapToBounds final LatLng southwest final LatLng northeast fi
  • PostgreSQL 错误:致命:角色“用户名”不存在

    我正在设置 PostgreSQL 9 1 我不能用 PostgreSQL 做任何事 不能createdb can t createuser 所有操作都会返回错误信息 Fatal role h9uest does not exist h9ue
  • QML 是否支持属性的访问说明符(例如 Private)?

    我只是想知道 QML 中是否有像 C 中那样的私有属性等概念访问说明符 如果没有 是否想知道我的 QML 组件中有大约 10 个属性 但我必须限制仅访问 2 个属性 我们怎样才能实现这个场景 QML 本身没有这样的内置功能 但这里是 Qt
  • 如何获取 3D 维数组并将其转换为模型?

    我正在使用 Open CV 并且可以使用代码从图像中提取多维数据 但是显示它的简单方法是什么 我有一个 3D 数组 line start x y z line end x y z 线条之间的任何内容都将被坚实的平面填充 是否有某种函数可以用
  • 以编程方式向视图添加多个按钮,调用相同的方法,确定它是哪个按钮

    我想以编程方式将多个 UIButton 添加到视图中 按钮的数量在编译时未知 我可以像这样制作一个或多个 UIButton 在循环中 但为了简单起见而缩短 UIButton button UIButton buttonWithType UI
  • 从 *.wav 文件中提取幅度列表以在 Python 中使用

    我在编程和转换方面遇到了一些麻烦 我正在设计一个人工智能来识别乐器演奏的音符 并需要从波形文件中提取原始声音数据 我的目标是对文件中的时间块执行 FFT 运算以供 AI 使用 为此 我需要音频文件的幅度列表 但我似乎找不到可行的转换技术 这
  • 另一个“连接被对等方重置”错误

    我正在使用套接字模块在 python 中创建服务器 客户端应用程序 并且出于某种原因我的服务器不断结束连接 奇怪的是 它在 Windows 中完美运行 但在 Linux 中却不行 我到处寻找可能的解决方案 但没有一个有效 下面是代码的清理版
  • .NET 4.7.2 ASP.NET WebForms 网站中的依赖注入 - 构造函数注入不起作用

    我们目前正在处理一个较旧的项目 ASP NET Web 表单网站 并尝试看看是否可以为其设置依赖项注入 需要强调的是 这不是一个 Web 应用程序项目 它是较旧的类型 即网站 目前它的目标是 NET 4 7 2
  • 如何反向路由静态文件?

    起初我有一个 Twitter 图标的链接 public images twitter icon png 但现在我想根据类型显示 Twitter Facebook 或 LinkedIn 图标 因此 我创建了一个 FastTag 它将类型作为参
  • 应用程序启动后无法立即使用 ShowCursor(FALSE) 隐藏鼠标光标

    我需要在应用程序启动后立即隐藏鼠标光标 我为此使用 ShowCursor FALSE 但通常在 ShowCursor FALSE 之后 光标仍保留在屏幕上 直到鼠标移动 我和其他人在 Windows XP 到 10 的不同 PC 上重现了这
  • MySQL中如何计算当前行与上一行之间的时间差

    我有这样的 mysql 表 t1 我想要做的是在所有行之间进行计算并将值保存在名为 diff 的新列中 TICKETID DATENEW DIFF 16743 12 36 46 0 16744 12 51 25 15 minute 1674
  • unescape后如何转义嵌入的JSON

    使用 Json NET 进行序列化时 我需要在之前反序列化时取消转义之后转义嵌入的 JSON 这意味着我根据以下 JSON 进行了转义this https stackoverflow com questions 39154043 how d
  • leetcode:使用链表将两个数字相加

    我正在尝试解决涉及链表的中级问题之一 它是这样的 给您两个表示两个非负整数的非空链表 这些数字以相反的顺序存储 并且每个节点都包含一个数字 将两个数字相加并以链表形式返回总和 您可以假设这两个数字不包含任何前导零 除了数字 0 本身 蟒蛇代
  • 不剪辑内容的剪辑路径

    我正在尝试使用剪辑路径创建形状背景 但我不想剪辑该 div 的子项 内容 这是代码 div webkit clip path polygon 0 57 100 21 100 100 0 100 clip path polygon 0 57
  • sonarRunner 权限不足错误

    我在运行声纳时遇到权限不足的错误 在我将 sonarQube 升级到 5 0 后 这种情况开始发生 错误 声纳运行程序执行期间出错 错误 无法执行声纳 错误 原因 无法装饰 org sonar api resources File 152f
  • 无法建立 SSL/TLS 安全通道的信任关系:根据验证过程,远程证书无效

    我有一个 ASP NET MVC Web 应用程序 它已经在生产环境中运行了大约 4 年 从大约一周前开始 我突然发现对第 3 方安全 API 的所有调用都返回此错误 System Net WebException 底层连接已关闭 可以 不
  • 如何仅使用 DOM 将所有元素上的一个类替换为另一个类?

    我只想将一个类名更改为另一个类名 我尝试过使用 document getElementsByClassName current setAttribute class none 但它不起作用 我是 JavaScript 新手 解释 docum
  • 关闭并重新打开 Realm 实例是否会影响性能?

    使用 SQLite 时 我通常每个应用程序都有一个 SQLiteOpenHelper 实例 并且我从不关闭它 因为它的数据库被许多其他类连续使用 关闭 重新打开它会更慢 更复杂 现在我正在研究 Realm 并且计划仅从数据访问对象访问 Re