iPhone4 iOS5 NSFetchedResultsControllerバッチサイズを選択する方法は?

私は5つの結果のコントローラを取得しました。データを表示するだけではなく、実際にデータを処理するための最初のものを追加しています。私はコントローラが最大150のオブジェクトを管理することを期待しています。順番に最大5つのオブジェクトで一度に作業するバッチサイズを選択する必要がありますか?それは5ですか?

  - (NSFetchedResultsController *)estimatorEventsController
    {
        if (__estimatorEventsController != nil)
        {
            return __estimatorEventsController;
        }

        /*
         Set up the fetched results controller.
         */
       //Create the fetch request for the entity.
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
       //Edit the entity name as appropriate.
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"EstimatorEvent" inManagedObjectContext:self.managedObjectContext];

        [fetchRequest setEntity:entity];

       //Set the batch size to a suitable number.
        [fetchRequest setFetchBatchSize:36];

       //Edit the sort key as appropriate.
        NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"epoch" ascending:YES];
        NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

        [fetchRequest setSortDescriptors:sortDescriptors];

       //Edit the section name key path and cache name if appropriate.
       //nil for section name key path means "no sections".
        NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"EstimatorEvents"];
        aFetchedResultsController.delegate = self;
        self.estimatorEventsController = aFetchedResultsController;


        NSError *error = nil;
        if (![self.estimatorEventsController performFetch:&error])
        {

            NSLog(@"Unresolved error __remindersController %@, %@", error, [error userInfo]);
           //     abort();
        }

        return __estimatorEventsController;
    }    

私はあなたの助けに感謝します!

2
追加された
ビュー: 1

2 答え

アレックス、

フェッチされた結果コントローラに800以上のアイテムがあり、フェッチをバッチしません。あなたが知っている、早すぎる最適化とすべてのことを約150項目を心配しないでください。

覚えておかなければならないのは、取得された結果コントローラではなく、取得要求にバッチ制限があることです。フェッチ要求は、数千のアイテムを含む結果配列を簡単にトリガーできる下位レベルのアイテムであるため、この区別は重要です。そのようなサイズのクエリには注意が必要です。 150行だけで大したことではありません。

アンドリュー

2
追加された
このプロパティを設定しないことを意味しますか?[fetchRequest setFetchBatchSize:36] ;?
追加された 著者 Alex Stone,
アレックス、あなたの150のアイテムが大きなブロブでない限り、それらをすべて入手してください。最小のiOSデバイスでは、20 MBのワークスペースを開始できました。すべてのMac OS Xデバイスは大きかった。 CDのパフォーマンスの秘密の1つは、物事をRAMに取り込んでそこで複雑なクエリを実行することです。したがって、あなたがRAMに収まらないことを知っているときにのみ、CDを制限してください。アンドリュー
追加された 著者 adonoho,

ひどく情報に基づいた答えはありませんが、ほとんどのガイドは、一度に画面に表示されるセルの数の2〜3倍程度をロードすることを提案しているようです。テーブルは一度に、そしておそらく15になるでしょうか?一度にすべてを読み込まなければならないというメリットと、負荷やレイテンシがあるためにフェッチ要求が多すぎないことと、画面にプリフェッチされていないセルがあることを確認して突然応答する迅速なスクロール。

1
追加された
スクロールの面はかなり簡単です。私は計算の面に興味があります。スクロールだけでなく、計算目的でバッチサイズを選択するにはどうすればよいですか?
追加された 著者 Alex Stone,