Ich analysiere eine Tonne Daten, die ich anfänglich in einen Core-Datenspeicher einfüge.Verbessern Sie die Geschwindigkeit beim Aktualisieren vorhandener Datensätze (~ 11.000) in den Core-Daten
Zu einem späteren Zeitpunkt, Parsing ich die gleiche XML, obwohl einige Mai wurden aktualisiert. Was ich dann tue, ist, nach einem existierenden Datensatz mit dem gleichen Tag zu suchen, und wenn es einen bereits gibt, aktualisiere ich den Datensatz mit den Daten.
Während meine erste Analyse (etwa 11.000 Datensätze) dauert etwa 8 Sekunden, scheint die Aktualisierung teuer und dauert 144 Sekunden (das sind Simulator läuft, also deutlich länger auf tatsächlichen Geräten).
Während das erste Mal in Ordnung ist (ich zeige einen Fortschrittsbalken), ist der zweite unannehmbar lang, und ich möchte etwas tun, um die Geschwindigkeit zu verbessern (obwohl es im Hintergrund in einem separaten Thread passiert) .
Leider ist es keine Frage von find-or-create, da die Daten in der XML für einzelne Datensätze geändert haben können, so dass jeder im Wesentlichen ein Update benötigt.
Ich habe die Attribute indiziert, was das erste Parsing und die Aktualisierung ebenfalls beschleunigt hat, aber es ist immer noch langsam (die obigen Zahlen beziehen sich auf die Indizierung). Was mir aufgefallen ist, dass sich das Parsen/Aktualisieren allmählich verlangsamt. Während anfänglich schnell, wird es immer langsamer, da immer mehr Platten bearbeitet werden.
Meine Frage ist also, ob irgendetwas Vorschläge für mich hat, wie ich die Geschwindigkeit verbessern könnte, mit der ich meinen Datensatz aktualisiere? Ich verwende MagicalRecord zum Abrufen des Datensatzes. Hier ist der Code:
Record *record;
if (!isUpdate) {
record = [NSEntityDescription insertNewObjectForEntityForName:@"Record" inManagedObjectContext:backgroundContext];
} else {
NSPredicate *recordPredicate = [NSPredicate predicateWithFormat:@"SELF.tag == %@", [[node attributeForName:@"tag"] stringValue]];
record = [Record findFirstWithPredicate:recordPredicate];
}
Wie oft rufst du den Kontext auf? –
Ich nenne es insgesamt 18 Mal. Ich habe mit dieser Nummer herumgespielt und es scheint die magische Zahl für die Gesamtgeschwindigkeit zu sein. – runmad
Wenn ich das richtig lese, dauert es beim ersten Einlegen dieser Aufzeichnungen nur etwa 8 Sekunden. Ist es also naiv zu glauben, dass wenn Sie die bestehende Entität löschen, dann fügen Sie eine neue mit den aktualisierten Daten ein, die schneller ist? –