1

下面显示了我添加到 NSManagedObject 的子类中的方法,用于填充单个实体并将其添加到 Core Data。我有大约 1000 个对象要添加到数据库中(我是在循环中进行的,而不是如下所示的列表)我的问题是关于性能,是否将 1000 个对象中的每一个逐个添加会增加大量开销到核心数据(我认为它确实如此)。有没有办法存储每个托管对象并以单一(更快)的方式添加它们。

NSManagedObjectContext *context = [[self managedDocument] managedObjectContext];
[Atomal createAtomalInContext:context withName:@"H11" age:@57 andType:@"Nantar"];
[Atomal createAtomalInContext:context withName:@"H23" age:@22 andType:@"Nantar"];
[Atomal createAtomalInContext:context withName:@"H54" age:@11 andType:@"Nantar"];
[Atomal createAtomalInContext:context withName:@"H34" age:@98 andType:@"Nantar"];
[Atomal createAtomalInContext:context withName:@"H17" age:@35 andType:@"Nantar"];

.

+ (Atomal *)createAtomalInContext:(NSManagedObjectContext *)context withName:(NSString *)name age:(NSNumber *)age andType:(NSString *)type {
    Atomal *atomal = nil;
    atomal = [NSEntityDescription insertNewObjectForEntityForName:@"Atomal" inManagedObjectContext:context];

    // POPULATE PROPERTIES
    [atomal setName:name];
    [atomal setAge:age];
    [atomal setType:type];
    NSLog(@"CORE: Adding >>> %@ %@ %@", [atomal name], [atomal age], [atomal type]);
    return atomal;
}
4

1 回答 1

4

这应该没问题。如果您真的担心性能并且您的实施确实存在问题,那么您应该分析并获得真正的结果以进行工作,而不是仅仅征求意见。

说这应该是相当便宜的,因为所有托管对象都是在内存中创建的——当你调用save:Core Data 时,它就会开始命中磁盘。撞击磁盘的 IO 是缓慢的部分,所以如果你确保将其保持在最低限度,你应该没问题。

同样,您在这里做的更昂贵的事情之一是日志记录,即 IO 输出到日志,如果您在紧密循环中执行大量日志记录,您会真正注意到这种效果。

于 2012-10-04T21:08:14.923 回答