为什么 Sqflite 在 Android 上非常慢?

Why Sqflite is very slow on Android?

我已经为 android 和 Ios 开发了一个 flutter 应用程序,它们都使用相同的代码。我按照官方指南使用 sqflite 实现了数据库。当我必须使用我的数据库(插入、删除...)时,问题就来了。我的应用程序必须执行大约 12 次插入,这些插入在 IOS 设备上是即时的,但在不同的平均 Android 设备上需要大约 10 秒。都是真实版。

由于我以前没有使用数据库的经验,所以我不知道花这么长时间是否正常或这里发生了什么。正如我提到的 Ios 和 Android 的代码相同,我使用函数 insert(),其中大约有 12 个,我插入的数据非常简单。

await db.insert(data);
await db.insert(data);
await db.insert(data); 
...

除了我的问题,我在这里发现了同样的问题https://github.com/tekartik/sqflite/issues/202,但仅此而已。

并不是说 Sqflite 特别慢,而是因为您将 await 与多个 db.insert 一起使用。基本上 await 是一个线程阻塞过程,这意味着您的第二个 db.insert 在第一个完成之前不会执行,第三个也是如此,它不会在第二个完成时完成仍然 运行.

此外,您正在链接对 db.insert 的调用,而不是您应该使用 db.batch() 它将允许您一次计划和执行您的 db.insert 而不会阻塞您的数据库并避免 ping -pong 在 package documentation.

中所说的本机代码之间

这是一个代码示例,说明如何进行插入:

final batch = db.batch();

batch.insert('myTable', data);
batch.insert('myTable', data);
batch.insert('myTable', data);

await batch.commit();

只需这样做,您将只需要一个 await,这应该会提高您的表现。