【发布时间】:2018-05-17 06:26:48
【问题描述】:
我使用 Room 作为 SQLite 上的抽象层。在阅读了这个page之后,我发现我们可以同时插入多个对象。目前我使用 For 循环来插入对象,即每个 For 循环迭代中的一个对象。我目前知道的两种插入方式是:
-
使用 For 循环并一次插入每个对象
@Insert(onConflict = OnConflictStrategy.REPLACE) public void addActivity(Person person); -
插入一个数组或对象列表。
@Insert(onConflict = OnConflictStrategy.REPLACE) public void insertUsers(Person ... people);
我在编写对象插入的代码时,不知道第二种插入方式。现在我想知道这两种方式之间的速度是否有明显差异,以便我可以更改代码以提高应用程序的性能。
【问题讨论】:
-
您可以通过在数据库中使用每种方法插入 10k 个项目并对其进行计时来轻松测试它。我认为批量插入会更高效
-
我对一组 12k 项进行了测试,for-looping 需要 55 秒才能保存,而使用准备好的语句方法在 600 毫秒内保存了所有内容。我认为没有理由不使用第二种方法。
-
@BenoitDuffez 嘿伙计,感谢您的努力。这是一个有趣的观察。请考虑将此评论添加为答案,以便其他人可以看到。
标签: android sqlite sql-insert android-room android-architecture-components