解释在不同 Android 设备上访问 SharedPreferences 的性能差异 [英] Explain perf difference in accessing SharedPreferences on different Android devices

查看:40
本文介绍了解释在不同 Android 设备上访问 SharedPreferences 的性能差异的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试为我的 Android 应用程序的用户调试极端的性能差异.我已经将其追溯到 DB 写入时间和 SharedPreferences 读取和写入时间的极端差异.

I am trying to debug extreme performance differences for users of my Android app. I have traced it to extreme differences in DB write time and SharedPreferences read and write time.

以下是我编写的 7 个性能测试,用于测试 SharedPreferences 的速度:

Here are 7 performance tests I wrote to test the speed of 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();
    }
}

在我的设备(原装摩托罗拉机器人)上,结果如下:

On my device (an Original Motorola droid), here are the results:

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)上,结果如下:

On my colleague's device (an HTC Evo), here are the results:

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

在我们的一个 Beta 用户设备 Samsung Galaxy S 上,结果如下:

On one of our beta users' device, a Samsung Galaxy S, here are the results:

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

我们看到读取和写入的访问时间都很慢.这些数字在设备上通常是一致的.当我检查我们的启动过程时,在某些情况下,在我们的 beta 用户设备上缓慢写入 SharedPreferences 似乎需要大约 10 秒(10000 毫秒)才能写入单个布尔值.

We see slow access times for both reads and writes. These numbers are generally consistent on the devices. The slow writes to SharedPreferences on our beta users device in some cases appear to take ~10 sec (10000 ms) for a single boolean value write when I inspect our startup processes.

谁能假设为什么 SharedPreferences 在三星 Galaxy S 上的执行速度如此之慢?有 文章 关于 三星 Galaxy S 在互联网上的滞后";这能解释我们看到的 SharedPreferences 行为吗?如果是这样,有人介意具体解释一下吗?

Can anyone hypothesize why SharedPreferences perform so much more slowly on a Samsung Galaxy S? There are articles about the "lag" on Samsung Galaxy S's out on the internet; would this explain the SharedPreferences behavior we see? If so, would someone mind explaining precisely how?

谢谢!

推荐答案

在库存 Galaxy S 上写入磁盘很慢.共享首选项保存到磁盘,DB 文件也是如此.连接点:)

Writing to disk is slow on a stock Galaxy S. Shared preferences are saved to disk, as are DB files. Connect the dots :)

这篇关于解释在不同 Android 设备上访问 SharedPreferences 的性能差异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆