Я пытаюсь отладить экстремальные различия в производительности для пользователей моего приложения для Android.Я проследил это до крайних различий во времени записи БД и времени чтения и записи SharedPreferences.
Вот 7 тестов производительности, которые я написал для проверки скорости SharedPreferences:
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();
}
}
На моем устройстве (оригинальный дроид Motorola), вот результаты:
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
На устройстве моего коллеги (HTC Evo) вот результаты:
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
На одном из устройств нашего бета-пользователя, Samsung Galaxy S, вот результаты:
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
Мы видим медленное время доступа для чтения и записи.Эти цифры в целом соответствуют устройствам.Медленная запись в SharedPreferences на нашем бета-устройстве пользователя в некоторых случаях, по-видимому, занимает ~ 10 секунд (10000 мс) для записи одного логического значения, когда я проверяю наши процессы запуска.
Может кто-нибудь предположить, почему SharedPreferences работают намного медленнее на Samsung Galaxy S?Есть статей о «отставании» на Samsung Galaxy S в интернете;это объяснит поведение SharedPreferences, которое мы видим?Если так, то кто-нибудь возражает объяснить, как именно?
Спасибо!