gpt4 book ai didi

ios - 有什么方法可以为单个对象优化简单的 NSFetchRequest 吗?

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

我正在后台队列中的子 moc 中进行数据处理。我需要按 ID 查询数据库,以便我可以区分更新现有对象和创建新对象。我发现大部分时间(50 项的总处理时间约为 2 秒)都被 executeFetchRequest:error: 消耗了。 NSPredicate 是最简单的形式——只匹配单个 ID 属性(ID 属性已经被索引),NSFetchRequest 应该返回一个或没有(ID 是唯一的) .有没有办法优化这种NSFetchRequest

这是我当前的代码:

+ (User *)userWithID:(NSNumber *)ID inManagedObjectContext:(NSManagedObjectContext *)context {
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"User"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ID == %@", ID];
[fetchRequest setPredicate:predicate];
[fetchRequest setFetchBatchSize:1];

NSError *error = nil;
NSArray *users = [context executeFetchRequest:fetchRequest error:&error];
if (error) {
abort();
}

if ([users count] == 1) {
return [users objectAtIndex:0];
} else if ([users count] > 1) {
// Sanity check.

} else {
return nil;
}
}

最佳答案

正如@ChrisH 在问题下的评论中指出的那样,对每个 ID 进行提取是不好的。所以我将处理流程更改为:

  1. 第一次枚举数据以提取 ID。
  2. 执行一次获取以获取所有匹配 ID 的现有用户,并将它们放入由 ID 键控的字典中(命名为 existingUsers)。
  3. 第二次枚举数据以进行真正的处理:在每次迭代中,要么更新在 existingUsers 中找到的一个现有用户,要么创建一个新用户,将其添加到 existingUsers如果是新的。

代码几乎翻了一番,但性能也是如此。非常好的权衡!

关于ios - 有什么方法可以为单个对象优化简单的 NSFetchRequest 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12694175/

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