我試圖將200k消息添加到核心數據對象以獲取Twitter應用程序的概念證明。這效果很好,我的實體被添加。我有一個UISearchBar
和一個UITableView
來顯示這些。但是,對於每一個新的1000個物體,我的時間似乎都呈指數增長。這是正常的嗎?我預計CoreData
對於龐大的數據集表現不錯。你有更好的建議來處理這麼龐大的數據集。我想知道,Dictionary apps
如何工作。巨大的核心數據對象
我的控制檯輸出是在這裏:
-2012-03-26 22:19:28.126 TweetReader [3668:707]完成1000
-2012-03-26 22:19:40.335 TweetReader [ 3668:707]完成2000
-2012-03-26 22:19:55.136 TweetReader [3668:707]完成3000
-2012-03-26 22:20:18.569 TweetReader [3668:707]完成4000
-2012-03-26 22:20:50.166 TweetReader [3668:707]完成5000
-2012-03-26 22:21:30.284 TweetReader [3668:707]完成6000
-2012-03-26 22:22:19.096 TweetReader [3668:707]完成7000
-2012-03-26 22:23:16.091 TweetReader [3668:707]完成8000
-2012-03-26 22:24:21.321 TweetReader [3668:707]完成9000
-2012-03-26 22:25:35.017 TweetReader [3668:707]完成10000
-2012-03-26 22:26:57.250 TweetReader [3668 :707]完成11000
-2012-03-26 22:28:27.563 TweetReader [3668:707]完成12000
-2012-03-26 22:30:06.202 TweetReader [3668:707]完成13000
- 2012-03-26 22:31:52.645 TweetReader [3668:707]完成14000
這是我的代碼保存爲CoreData
:
for (NSInteger i = 1; i <= 200000; i++) {
NSAutoreleasePool * myPool = [[NSAutoreleasePool alloc] init];
Tweet *tweetie = [NSEntityDescription insertNewObjectForEntityForName:@"Tweet" inManagedObjectContext:self.managedObjectContext];
tweetie.name = [NSString stringWithFormat:@"%10d",i];
tweetie.message =[NSString stringWithFormat:@"%10d",i];
// Save the context after 1000 objects.
if (! (i % 1000)) {
NSError *error;
NSLog(@"Done %d",i);
if (![managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
[myPool release];
}
}
你抱怨的增加是緩慢的,或一旦與數據集中工作,這是完整的? – jrturton 2012-03-26 16:33:45
此外,您正在爲循環的每次迭代創建一個新的自動釋放池 - 這是一個壞主意。 – jrturton 2012-03-26 16:34:46
加入緩慢。花了將近2小時纔將200k個物體添加到實際的iPhone 3gs上。 – Pungs 2012-03-26 17:12:05