我的iPhone應用程序具有實體Words
,屬性word
,length
和language
。兩者都被編入索引: 簡單核心數據提取非常緩慢
我將cdatamodel和數據庫複製到一個單獨的導入器應用程序,在該應用程序中預填了大約400k字的不同語言。我通過查看SQLite文件來驗證導入,然後將預填充的數據庫複製回iPhone項目。
首先我認爲(簡單)謂詞是問題。但是,即使在讀取請求刪除謂語之後,它需要很長的時間來執行:
2011-09-01 09:26:38.945 MyApp[3474:3c07] Start
2011-09-01 09:26:58.120 MyApp[3474:3c07] End
這裏是我的代碼如下所示:
// Get word
NSLog(@"Start");
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Words" inManagedObjectContext:appDelegate.managedObjectContext];
[fetchRequest setEntity:entity];
NSError *error = nil;
NSArray *fetchedObjects = [appDelegate.managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
//... error handling code
}
[fetchRequest release];
NSLog(@"End");
return fetchedObjects;
是條目的數據庫中的數核心數據的問題?
編輯: 作爲gcbrueckmann和jrturton指出,這是一個好點的設置fetchBatchSize
。但取時間仍然是不令人滿意的:
2秒謂詞組:
NSPredicate *謂詞= [NSPredicate predicateWithFormat:@ 「長度==%d與語言BEGINSWITH%@」,字長,LNG ]。 [fetchRequest setPredicate:predicate];
7秒與批料尺寸集:
[fetchRequest setFetchBatchSize:1];
1與謂詞和批量大小都第二套
是否還有另一個瓶頸?
在你的謂詞是語言可能比長度更嚴格,謂詞檢查有時爲了能夠加快速度爲好。例如在這種情況下,如果有60%的單詞符合您的長度標準,但只有40%符合語言標準,最好先進行語言檢查。另一件事可能是,如果你需要更快的速度將是它預先加載,然後過濾內存中的數組不知道如果你的iPhone應用程序可以處理,但。 –
在這種情況下,第一個查詢是比較整數(索引將使這非常快),第二個是字符串比較(即使索引字符串不會很快) - 如果重新排序查詢幫助,我會感到驚訝。但是,請嘗試一下 - 我有興趣看看它是否有幫助! – deanWombourne
哦,我忘了提及它:我已經試圖交換謂詞的順序,它不會加快取回。 – Norbert