ORMLites createOrUpdate scheint langsam zu sein - was ist normale Geschwindigkeit?

8

Der Aufruf der Methode RuntimeExceptionDao von ORMLite createOrUpdate(...) in meiner App ist sehr langsam.

Ich habe ein sehr einfaches Objekt ( Item ) mit einem 2 ints (eins ist das generatedId ), ein String und ein double . Ich teste die Zeit, die es dauert (ungefähr), das Objekt in der Datenbank (100 mal) mit dem folgenden Code zu aktualisieren. Die Log-Anweisung protokolliert:

  

Zeit, 1 Zeile 100 mal zu aktualisieren: 3069

Warum dauert das Aktualisieren eines Objekts in einer Tabelle mit nur einer Zeile 100 Sekunden? Ist das die normale ORMLite-Geschwindigkeit? Wenn nicht, was könnte das Problem sein?

%Vor%

Wenn ich 100 neue Zeilen erstelle, ist die Geschwindigkeit noch langsamer.

Hinweis: Ich verwende bereits ormlite_config.txt . Es protokolliert "Loaded configuration for class ...Item" , das ist also nicht das Problem.

Danke.

    
Frank 01.08.2012, 14:29
quelle

1 Antwort

23

Dies kann leider die "erwartete" Geschwindigkeit sein. Stellen Sie sicher, dass Sie ORMLite Version 4.39 oder höher verwenden. createOrUpdate(...) verwendete eine teurere Methode, um vorher auf das Vorhandensein des Objekts in der Datenbank zu testen. Aber ich vermute, dass dies eine minimale Geschwindigkeitsverbesserung sein wird.

  

Wenn ich 100 neue Zeilen erstelle, ist die Geschwindigkeit noch langsamer.

Standardmäßig befindet sich Sqlite im Auto-Commit-Modus. Eine Sache, die Sie versuchen sollten, besteht darin, Ihre Einfügungen (oder Ihre createOrUpdate s) mit der Methode ORMLite Dao.callBatchTasks(...) zu umbrechen.

In BulkInsertsTest Android-Einheit test , fügt die folgende Methode doInserts(...) 1000 Elemente ein. Wenn ich es gerade nenne:

%Vor%

Es dauert 7,3 Sekunden in meinem Emulator. Wenn ich mit der Methode callBatchTasks(...) aufruft, die Transaktionen um den Anruf in Android Sqlite umschließt:

%Vor%

Es dauert 1,6 Sekunden. Die gleiche Leistung kann mit der Methode dao.setSavePoint(...) erzielt werden. Dies startet eine Transaktion, ist aber nicht so gut wie die Methode callBachTasks(...) , da Sie sicherstellen müssen, dass Sie Ihre eigene Transaktion schließen:

%Vor%

Dies dauert auch ~ 1,7 Sekunden.

    
Gray 01.08.2012, 15:05
quelle

Tags und Links