CreaOrUpdate di ORMLite sembra lento – qual è la velocità normale?

Chiamare il metodo createOrUpdate(...) ORMLite RuntimeExceptionDao nella mia applicazione è molto lento.

Ho un object molto semplice ( Item ) con un int 2 (uno è il generatedId ), una String e un double . Provo il tempo necessario (all'incirca) di aggiornare l'object nel database (un 100 volte) con il codice riportto di seguito. I registri dell'istruzione log:

  • Come integrare TEST PayU Payment Gateway in applicazioni Android?
  • Come escludere determinati messaggi tramite il nome TAG utilizzando il logb adb di Android?
  • Come rimuovere gli elementi da un elenco con il gesto di scorrimento come in gmail
  • Proguard 4.7 con Eclipse SDK 3.7.1: Proguard non riesce con java.io.IOException - (tipo di verifica sconosciuto nella cornice della mappa dello stack)
  • Problemi di prova Alpha di OpenGL ES2
  • Mockito su Android, Context.getString (id) e NullPointerException
  • tempo per aggiornare 1 fila 100 volte: 3069

    Perché occorre 3 secondi per aggiornare un object 100 volte, in una tabella con solo 1 row. È questa la normale velocità ORMLite? Altrimenti, qual è il problema?

     RuntimeExceptionDao<Item, Integer> dao = DatabaseManager.getInstance().getHelper().getReadingStateDao(); Item item = new Item(); long start = System.currentTimeMillis(); for (int i = 0; i < 100; i++) { item.setViewMode(i); dao.createOrUpdate(item); } long update = System.currentTimeMillis(); Log.v(TAG, "time to update 1 row 100 times: " + (update - start)); 

    Se creo 100 nuove righe allora la velocità è ancora più lenta.

    Nota: sto già utilizzando ormlite_config.txt . Si registra "Loaded configuration for class ...Item" quindi questo non è il problema.

    Grazie.

  • Android - Ruota l'image intorno al punto centrale?
  • Android Puoi get un risultato di attività da un startActivityForResult a catena
  • Come distriggersre MediaPlayer in android
  • Android NDK UnsatisfiedLinkError - una ragione sorprendente
  • GdxRuntimeException: Imansible caricare il file
  • ArrayAdapter.getPosition (elemento) restituisce cosa?
  • One Solution collect form web for “CreaOrUpdate di ORMLite sembra lento – qual è la velocità normale?”

    Questa può essere la "velocità prevista" purtroppo. Assicurati di utilizzare ORMLite versione 4.39 o superiore. createOrUpdate(...) stava usando un metodo più costoso per verificare in precedenza l'esistente dell'object nel database. Ma sospetto che questo sarà un miglioramento minimo della velocità.

    Se creo 100 nuove righe allora la velocità è ancora più lenta.

    Per impostazione predefinita, Sqlite è in modalità di auto-commit. Una cosa da cercare è di avvolgere i tuoi inserti (o il tuo createOrUpdate ) utilizzando il Dao.callBatchTasks(...) ORMLite Dao.callBatchTasks(...) .

    Nel test di unità Android per BulkInsertsTest , il seguente doInserts(...) inserisce 1000 voci. Quando lo chiamo solo:

     doInserts(dao); 

    Ci vogliono 7,3 secondi nel mio emulatore. Se chiamo utilizzando il callBatchTasks(...) che avvolge una transazione attorno alla chiamata in Android Sqlite:

     dao.callBatchTasks(new Callable<Void>() { public Void call() throws Exception { doInserts(dao); return null; } }); 

    Ci vogliono 1,6 secondi. La stessa prestazione può essere ottenuta utilizzando il dao.setSavePoint(...) . Questo inizia una transazione ma non è buono come il callBachTasks(...) perché devi assicurarsi di chiudere la propria transazione:

     DatabaseConnection conn = dao.startThreadConnection(); Savepoint savePoint = null; try { savePoint = conn.setSavePoint(null); doInserts(dao); } finally { // commit at the end conn.commit(savePoint); dao.endThreadConnection(conn); } 

    Questo richiede anche ~ 1,7 secondi.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.