iPhone4 iOS5 NSFetchedResultsController hoe batchgrootte te kiezen?

Ik kreeg nu 5 opgehaalde controllers voor resultaten en voeg mijn eerste toe om daadwerkelijk met data te werken in plaats van deze alleen weer te geven. Ik verwacht dat de controller tot 150 objecten kan beheren. Welke batchgrootte moet ik kiezen om per keer in volgorde met maximaal 5 objecten te werken? Is het 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;
    }    

Ik waardeer je hulp!

2

2 antwoord

Alex,

Ik heb meer dan 800 items in mijn opgehaalde controllers voor resultaten en deel de ophalen niet uit. Maak je geen zorgen over 150 items ... je weet wel, voortijdige optimalisatie en zo.

Het andere om te onthouden is dat de batchlimiet op de ophaalopdracht staat en niet op de opgehaalde resultatencontroller. Dit onderscheid is belangrijk omdat het ophaalverzoek een item op een lager niveau is waarmee eenvoudig een resultatenreeks met duizenden items kan worden geactiveerd. Men moet voorzichtig zijn met vragen van dergelijke afmetingen. 150 rijen is gewoon geen big deal.

Andrew

2
toegevoegd
Bedoel je dat je deze eigenschap niet instelt: [fetchRequest setFetchBatchSize: 36] ;?
toegevoegd de auteur Alex Stone, de bron
Alex, tenzij je 150 items grote klodders zijn, haal ze dan allemaal. Het kleinste iOS-apparaat gaf je ooit een werkruimte van 20 MB om te starten. Alle Mac OS X-apparaten waren groter. Een geheim van de CD-prestaties is om dingen in het RAM-geheugen te krijgen en daar complexe vragen te stellen. Beperk daarom alleen de CD als u weet dat u niet in het RAM-geheugen past. Andrew
toegevoegd de auteur adonoho, de bron

Ik heb geen erg goed geïnformeerd antwoord, maar het lijkt erop dat de meeste gidsen voorstellen dat je ongeveer twee tot drie keer zoveel cellen laadt als op elk moment op het scherm verschijnt, dus als je er vijf hebt die zichtbaar zijn in de tafel tegelijk, dan misschien vijftien? Het is een balans tussen de voordelen van het niet alles in één keer laden, en niet te veel ophaalopdrachten omdat ze wat laden en latency hebben en ervoor zorgen dat je al een aantal cellen hebt die nog niet op het scherm zijn opgehaald om snel responsief te zijn snel scrollen.

1
toegevoegd
Het scrollende aspect is vrij eenvoudig. Ik ben geïnteresseerd in het berekeningenaspect. Hoe kies ik de batchgrootte voor berekeningsdoeleinden, niet alleen om te scrollen?
toegevoegd de auteur Alex Stone, de bron