gpt4 book ai didi

ios - Sqlite 或 Core Data 更新超过 50000 条记录

转载 作者:行者123 更新时间:2023-11-29 11:54:41 25 4
gpt4 key购买 nike

我目前正在为我的项目使用 coredata。但是当api返回应用需要更新的54000个对象时,用户不得不等待将近2个小时。这是当前项目的主要问题,我正在考虑使用 sqlite 而不是再使用 coredata 来更新数千个对象。

使用 Sqlite 是正确的决定还是对 CoreData 有什么建议?我不能决定。任何帮助都会很棒。谢谢。

这是我正在做的:

NSManagedObjectContext *privateObjectContext = [AppDelegate appDelegate].privateManagedObjectContext;
[privateObjectContext performBlock:^{

int i = 1;
for (NSDictionary *item in itemlist) {
i++;

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:
@"itemID == %@",[item objectForKey:@"item_id"]
]];
NSError *error;
NSMutableArray *inventories = [[NSMutableArray alloc]initWithArray:
[privateObjectContext executeFetchRequest:fetchRequest
error:&error]];
ItemManagedObject *itemMO;

if(inventories.count){
itemMO = inventories.firstObject;
}else{
itemMO = [NSEntityDescription insertNewObjectForEntityForName:@"ItemObject"
inManagedObjectContext:privateObjectContext];
}
[itemMO prepareWithDictionary:item];
}

NSError *error;
if (![privateObjectContext save:&error]) {
completionHandler(NO);
}
}

最佳答案

Core Data 提供了 NSBatchUpdateRequest,它允许您直接在持久存储上进行更新,而无需在内存中实例化和处理托管对象。

您还应该使用核心数据性能工具运行此代码。如果 itemList 包含 54,000 个对象,那么您将对持久存储执行 54,000 次提取以每次检查一个 ID。预先获取所有 ID 然后在内存中检查结果比执行重复的获取请求要快得多——原始 SQL 中的代码几乎和 Core Data 中的一样慢。

这段代码看起来也是错误的:

ItemManagedObject *itemMO;

if(itemMO.count){

它永远不会通过 if 测试,除非你在某处漏掉了一行。

关于ios - Sqlite 或 Core Data 更新超过 50000 条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39641715/

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