私はアプリを持っており、全文検索を実装しています。私は2つのエンティティを持っています:それらの間に多対多の関係を持つキーワードと記事。コードの 問題の作品はこれです:なぜこのコードは遅いのですか? (CoreDataとNSSet)
keywordsInRange = [[[CoreDataManager sharedManager] managedObjectContext] executeFetchRequest:request error:&err];
for(Keywords* word in keywordsInRange) {
NSDate *methodStart = [NSDate date];
[mySet addObjectsFromArray:[word.article allObjects]];
NSDate *methodFinish = [NSDate date];
NSTimeInterval executionTime = [methodFinish timeIntervalSinceDate:methodStart];
NSLog(@"Keyword Search Exec Time: %.3f", executionTime);
}
出力はこれです:あなたがセットのキーワードにリンクされているすべての記事を追加するために、見ることができるように
Keyword Search Exec Time: 0.235 //added 1 article
Keyword Search Exec Time: 0.216 //added 6 articles
Keyword Search Exec Time: 0.211 //etc
Keyword Search Exec Time: 0.205
Keyword Search Exec Time: 0.204
が突然私に長い時間がかかりますデバイスのテスト(iPad iOS 4.2.1)。シミュレータでテストすると、時刻は次のようになります。
0.029
0.026
0.026
0.026
0.026
ここで、私は何をすべきかをスピードアップするにはどうすればよいですか?
シミュレータがデバイスよりも大幅に高速に動作することを期待する必要があります。つまり、2/10秒は遅いようです。 'mySet'にはいくつのオブジェクトがありますか?ループの前に – kubi
があります。mySetには何もありません。たとえば、dと入力すると、mySetは17個のオブジェクトで塗りつぶされます。それには約1秒かかります。 –
NSLogを使ってすべてのものをコンソールに出力するのにも時間がかかることに注意してください。あなたは遅さに気づく前に、または後に 'NSLog'を追加しましたか? – fabian789