Ich versuche, extreme Leistungsunterschiede für Benutzer meiner Android-App zu beheben. Ich habe es auf extreme Unterschiede in der DB-Schreibzeit und SharedPreferences Lese- und Schreibzeit zurückgeführt.
Hier sind 7 Leistungstests, die ich geschrieben habe, um die Geschwindigkeit von SharedPreferences zu testen:
private void testEditor1() {
SharedPreferences settings = this.getSharedPreferences(Constants.PrefsName, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("testEditor1", true);
editor.commit();
}
private void testEditor2() {
for (int i = 0; i < 10; i++) {
SharedPreferences settings = this.getSharedPreferences(Constants.PrefsName, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("testEditor2", true);
editor.commit();
}
}
private void testEditor3() {
SharedPreferences settings = this.getSharedPreferences(Constants.PrefsName, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putInt("testEditor3", 1);
editor.commit();
}
private void testEditor4() {
for (int i = 0; i < 10; i++) {
SharedPreferences settings = this.getSharedPreferences(Constants.PrefsName, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putInt("testEditor4", i);
editor.commit();
}
}
private void testEditor5() {
for (int i = 0; i < 100; i++) {
SharedPreferences settings = this.getSharedPreferences(Constants.PrefsName, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putInt("testEditor5", i);
editor.commit();
}
}
private void testEditor6() {
SharedPreferences settings = this.getSharedPreferences(Constants.PrefsName, 0);
for (int i = 0; i < 10; i++) {
SharedPreferences.Editor editor = settings.edit();
editor.putInt("testEditor6", i);
editor.commit();
}
}
private void testEditor7() {
SharedPreferences settings = this.getSharedPreferences(Constants.PrefsName, 0);
for (int i = 0; i < 100; i++) {
SharedPreferences.Editor editor = settings.edit();
editor.putInt("testEditor7", i);
editor.commit();
}
}
Auf meinem Gerät (einem Original Motorola droid) sind die Ergebnisse wie folgt:
Test 1 (Write 1 bool): 21 ms
Test 2 (Write 10 bools): 316 ms
Test 3 (Write 1 int): 15 ms
Test 4 (Write 10 ints): 182 ms
Test 5 (Write 100 ints): 1525 ms
Test 6 (Write 10 ints 2): 108 ms
Test 7 (Write 100 ints 2): 1378 ms
Auf dem Gerät meines Kollegen (einem HTC Evo) sind die Ergebnisse wie folgt:
Test 1 (Write 1 bool): 63 ms
Test 2 (Write 10 bools): 14 ms
Test 3 (Write 1 int): 15 ms
Test 4 (Write 10 ints): 186 ms
Test 5 (Write 100 ints): 919 ms
Test 6 (Write 10 ints 2): 60 ms
Test 7 (Write 100 ints 2): 823 ms
Auf dem Gerät eines unserer Beta-Benutzer, einem Samsung Galaxy S, sind die Ergebnisse wie folgt:
Test 1 (Write 1 bool): 1188 ms
Test 2 (Write 10 bools): 1024 ms
Test 3 (Write 1 int): 105 ms
Test 4 (Write 10 ints): 1019 ms
Test 5 (Write 100 ints): 8142 ms
Test 6 (Write 10 ints 2): 630 ms
Test 7 (Write 100 ints 2): 6610 ms
Wir sehen langsame Zugriffszeiten sowohl beim Lesen als auch beim Schreiben. Diese Zahlen sind im Allgemeinen bei allen Geräten gleich. Die langsamen Schreibvorgänge auf SharedPreferences auf dem Gerät unserer Beta-Benutzer scheinen in einigen Fällen ~10 Sekunden (10000 ms) für einen einzelnen booleschen Wert zu dauern, wenn ich unsere Startprozesse untersuche.
Kann jemand eine Hypothese aufstellen, warum SharedPreferences auf einem Samsung Galaxy S so viel langsamer arbeitet? Es gibt Artikel über der "Rückstand" auf Samsung Galaxy S's aus dem Internet; würde dies erklären, die SharedPreferences Verhalten wir sehen? Wenn ja, würde jemand Geist erklären, genau wie?
Danke!