为什么 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
,这应该会提高您的表现。
我已经为 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
,这应该会提高您的表现。