gpt4 book ai didi

dart - 如何解决使用异步和等待使用 Sqflite 进行缓存时的缓慢问题?

转载 作者:IT王子 更新时间:2023-10-29 07:21:06 28 4
gpt4 key购买 nike

我将所有 API 数据存储到缓存中。一些 API 有超过 10000 个数据。 postman 响应时间在一秒内。但在应用程序中导航到下一页非常慢。我使用了这段代码:

    onPressed: () async {
...
}
else {
var token = Token(
id: 1,
token: tokens,
refreshToken: model.data.refreshToken,
);
await storeRegister(_url,tokens);
await storeEquipmentReg(_url,tokens);
await storeSyncLogin(_url,tokens);
await HelperDefCatMaster().deleteDefCatMaster();
await storeDefCatMaster(_url,tokens);
await HelperDefRegisterCat().deleteDefRegisterCat();
await storeDefRegisterCat(_url,tokens);
await HelperDefCatMaster().deleteDefCatRelation();
await storeDefCatRelation(_url,tokens);
await HelperDefCatMaster().deleteWoDescription();
await storeWoDescription(_url,tokens);
await HelperDefCatMaster().deleteCategoryDefect();
await storeCategoryDefect(_url,tokens);
await storeWorkSource(_url,tokens);
await storeWorkTypes(_url,tokens);
await storePriorities(_url,tokens);
await Helper().insert(token);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ListPage(model.data.token)));
}

storePriorities 函数看起来像,

storePriorities(String url, String token) async {
final response = await http.get(
'${url}/v1.0/Priorities',
headers: {'Authorization': 'Bearer ${token}'},
);
final jsonResponse = json.decode(response.body);
Priorities model = Priorities.fromJson(jsonResponse);
int length = model.data.length;
for (int i = 0; i < length; i++) {
var data = DataPriorities(
i: model.data[i].i,
d: model.data[i].d,
);
await HelperDefCatMaster().insertPriorities(data);
}
}

最佳答案

我给出的第一个答案建议仅在需要时使用 await

好吧,如果你在 SQLite 中插入了太多数据,我假设你可能正在使用这样的东西:

for (int i = 0; i <= 1000; i++) {
db.insert('table_name', dataObject.toMap());
}

好吧,这会一次处理很多事务,并且会占用您很多时间。

改成这样可以提高插入数据的速度:

Batch batch = db.batch();
for (int i = 0; i <= 1000; i++) {
batch.insert('table_name', dataObject.toMap());
}
await batch.commit();

我们在这里做的是,在单个事务中,我们一次执行多个插入。

我在一次插入 1000 行的演示项目中进行了此更改,结果非常好。 db.insert 在被调用 1000 次时耗时 7 秒,而 batch.insert 插入相同数量的数据耗时不到 1 秒。

如果您使用此解决方案优化您的代码并在需要时使用等待,您应该不会在 UI 上遇到任何问题。如果这有帮助,请告诉我。

关于dart - 如何解决使用异步和等待使用 Sqflite 进行缓存时的缓慢问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55608496/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com