Ich habe meinen eigenen Contentprovider erstellt, bei dem ich viele Daten mit mehreren Inserts gleichzeitig eintrage.
Die App erhält die Daten von einer externen Quelle und in diesem Moment erhalte ich ca. 30 Artikel (also 30 mal eine Beilage).
Jetzt habe ich bemerkt, dass das eine Menge kostbare Zeit kostet (ungefähr 3 Sekunden, 100ms auf jedem Einsatz).
Wie kann ich die Geschwindigkeit des Inhaltsanbieters verbessern? Ich habe bereits versucht, sie alle zusammenzufügen. Aber sie dauert bis zu 5 Sekunden.
Vielen Dank im Voraus.
wickle all das in insertBulk
in Transaktionen um.
Beispiel:
%Vor% bulkInsert
verwendet standardmäßig keine Transaktionen, da das Standardverhalten nur insert
aufruft:
Überschreiben Sie dies, um Anforderungen zum Einfügen eines Satzes neuer Zeilen zu bearbeiten, oder die Standardimplementierung wird über die Werte iterieren und für jeden von ihnen den Befehl insert (Uri, ContentValues) aufrufen.
Durch die Ausführung der Einfügungen in einer Transaktion wird die Geschwindigkeit erheblich verbessert, da nur ein Schreibvorgang in die aktuelle Datenbank stattfindet:
%Vor%Ich habe mal versucht, die Schreibgeschwindigkeit von ~ 2000 Schreibvorgängen zu verbessern, und das war die einzige große Verbesserung, die ich gefunden habe.
Doing db.setLockingEnabled(false)
Ich denke, gab etwa 1% Verbesserung, aber dann müssen Sie auch sicherstellen, dass keine anderen Threads in die db schreiben. Das Entfernen von redundanten Indizes kann auch einen kleinen Schub erzeugen, wenn die Tabelle sehr groß ist.
Tags und Links sql android android-contentprovider insert