1

以下は、NSManagedObject のサブクラスに追加したメソッドを示しています。これは、コア データに個々のエンティティを設定して追加するためのものです。データベースに追加するオブジェクトが約 1000 あります (以下に示すリストではなく、ループで実行しています) パフォーマンスに関する質問です。1000 個のオブジェクトを 1 つずつ追加すると、かなりのオーバーヘッドが追加されますか?コアデータに(そうすると思います)。各管理対象オブジェクトを保存し、それらを単一の (より高速な) 方法で追加する方法はありますか?

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:たときに、CoreDataがディスクにヒットし始めます。ディスクにヒットするIOは遅い部分なので、それを最小限に抑えることを確認すれば問題ないはずです。

ここでも、ここで行っているよりコストのかかる作業の1つは、ログへのIO出力であるロギングです。タイトなループで大量のロギングを行う場合、この効果に実際に気付くことができます。

于 2012-10-04T21:08:14.923 に答える