J'ai une requête qui fonctionne parfaitement bien sur les appareils Gingerbread et Jellybean mais qui tourne beaucoup plus lentement sur les appareils Lollipop. Je suis certain que la requête est correcte et bien écrite car elle fonctionne bien sur les anciens appareils.SQLite Query s'exécute beaucoup plus lentement sur Android Lollipop
Cursor c;
String query = QUERY STRING;
c = db.rawQuery(query,new String[]{Integer.toString(a),Integer.toString(b)});
Log.e("SQL_QUERY_PROGRESS","1");
while(c.moveToNext()){
Log.e("SQL_QUERY_PROGRESS","2");
// Do stuff with data
}
c.close();
Sur l'appareil Gingerbread il n'y avait que 0,008 d'une seconde entre les deux messages du journal alors que sur les dispositifs de Lollipop il prenait ~ 8 secondes, ce qui est incroyablement lent. Ce que je n'arrive pas à comprendre, c'est que les périphériques Lollipop sont plus récents et ont plus de RAM, de puissance CPU, donc la logique veut que les nouveaux périphériques lancent la requête plus rapidement que les anciens.
Pourrait-il y avoir un bug avec la version de Java utilisée sur Lollipop ou est-ce que la version de SQLite pourrait provoquer cette diminution massive de la vitesse?
Je l'ai utilisé adb shell
et navigué dans le fichier de base de données et exécution de la requête en utilisant sqlite3
sur les appareils Lollipop et il a couru presque instantanément ce qui me fait penser qu'il est plus d'un problème de Java que problème SQLite. Je n'ai aucune idée de ce qui pourrait causer le retard, donc toute aide ou idée serait grandement appréciée afin que je puisse enquêter plus loin!
Les périphériques Lollipop ont généralement une partition 'userdata' cryptée - ce qui ralentit de nombreuses opérations liées au stockage, y compris l'accès à la base de données. En outre, un appareil plus récent ne se traduit pas toujours par un stockage plus rapide. Il y a beaucoup de facteurs en jeu. Donc, sauf si vous voulez exécuter votre requête sur le même jeu de données sur le même périphérique juste sous différentes versions android et fournir plus d'informations - votre question est discutable et hors-sujet –
Exécutez-vous la requête dans le thread principal ou est-il en cours d'exécution dans un thread séparé (AsyncTask, Thread, IntentService ...)? – ucsunil
@AlexP. Je l'ai utilisé sur un Nexus 5 et un Galaxy S4 sur Lollipop, sur un Vodafone Smart II sur Gingerbread et sur un Galaxy S2 sur Jellybean, donc ces appareils devraient être au moins aussi rapides, sinon plus rapides en théorie et pas 1000 fois plus lents ! – PriestVallon