Der Einsatz von Android-Inhaltsanbietern erfordert viel Zeit

7

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.

    
Ion Aalbers 01.12.2011, 14:44
quelle

2 Antworten

21

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.

    
davidcesarino 01.12.2011, 14:47
quelle
3

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.

    
pgsandstrom 01.12.2011 14:48
quelle