Ho passato un po 'di tempo a esaminare alcuni problemi di prestazioni sul nostro dispositivo e ho notato che abbiamo un bel po' di app che eseguono db in lettura/scrittura ..Perché InsertHelper è stato deprecato?
Ho iniziato utilizzando l'API Contatti per inserire nuovi contatti & righe di dati, ed era dolorosamente lento. 1 minuto 18 secondi per inserire circa 1500 righe (250 contatti prime & 1250 righe di dati) ..
che avevo usato l'aiutante di inserimento in un'altra app per inserti di performance, e ha deciso di scrivere un applicazione di test che scrivere a DB separati w/metodi di inserimento separati.
Ogni db ha una tabella, ognuna con 4 colonne: _ID, Nome, Ora e Blob (tutto il tipo 'stringa') - proprio come il fornitore di contatti definisce le colonne di dati.
_ID è incremento automatico pk, Nome inserisce proprio la stessa cosa '1234567890', il tempo è giusto il tempo di sistema corrente a Milis, e Blob è una stringa w/lunghezza 6400 integrale della lettera 'A' ...
ho controllato l'inserimento di massa, ma non fa altro che scorre tutti gli inserti che avete definito, ed è altrettanto lento come fare gli inserti singolarmente (o impatto trascurabile performance) ..
ho provato 3 diversi metodi per fare gli inserti: ContentValues con il metodo db.insert: SQLiteStatement w/statement.execute() (fatto all'interno di una transazione). SqliteInsertHelper con transazione.
posso fornire un codice, ma ho avuto le migliori prestazioni del InsertHelper, e si chiede perché è stata sconsigliata:
tempo per inserire 100 record contentValues: 7.778 secondi (82 byte scritti/ms) SQLiteStatement: 1.311 secondi (489 byte scritti/ms) SqliteInsertHElper: 0,292 secondi (2197 byte scritti/ms)
Qualche idea?
Ho fatto qualche prova supplementare, e ha fatto un inserto regolare, ma ha reso parte di una transazione, questo ha migliorato le prestazioni notevolmente. Sembra che un certo codice sia probabilmente necessario da cedere (guardando il fornitore di contatti). – Chrispix
Dato il problema di prestazioni che hai menzionato, le transazioni sarebbero state il mio primo suggerimento (ogni transazione richiede l'attesa di andata e ritorno dell'IO, ogni inserimento al di fuori di una transazione è implicitamente racchiuso in uno). Passato, potrebbe essere utile leggere: http://stackoverflow.com/questions/14344172/android-bulk-insert-when-inserthelper-is-deprecated – rutter
Avrei anche suggerito le transazioni. Gli inserti che ho testato con le transazioni sono stati abbastanza veloci. – Luis