2011-11-10 3 views
3

Androidアプリのユーザーのパフォーマンスの違いをデバッグしようとしています。 DB書き込み時間とSharedPreferences読み書き時間の極端な違いを追跡しました。私のデバイス上で異なるAndroidデバイスで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(); 
    } 
} 

(オリジナルモトローラドロイド)、ここでの結果は以下のとおりです:私の同僚のオン

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 

ここ

は、私がSharedPreferencesの速度をテストするために書いた7つのパフォーマンステストですデバイス(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 

私たちのベータ版ユーザーのデバイスでは、Saここに結果があります:

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秒(10000ms)かかるようです。

サムスンギャラクシーSでSharedPreferencesのパフォーマンスがそれほど遅くなる理由は誰でも推測できますか?サムスンギャラクシーSのインターネット上にはarticlesaboutthe "lag"があります。これは我々が見るSharedPreferencesの振る舞いを説明するでしょうか?もしそうなら、誰かが正確にどのように説明してくれますか?

ありがとうございます!

答えて

1

ストックのGalaxy Sではディスクへの書き込みが遅くなります。共有設定はディスクに保存され、DBファイルも保存されます。ドットを接続します。

+0

私の理解では、内部メモリが大幅に高速化されました。ここではハードドライブについては言及していません。私には、Samsung Galaxy Sがどうして悪化しているのか、またアプリの経験から、どのアプリがうまくいくのかは不明です。 – esilver

+0

ハードドライブでなくても、速度を落とすことができます:)サムスンのデザインの決定には、「スマート」ストレージコントローラと組み合わせて独自のRFSファイルシステムを使用していることが原因です。オンラインで詳細を見つけることができます。アプリでできることは、すべてのI/O操作が別のスレッドで行われていることを確認し、遅れが目立たないようにすることです。 –

0

私は毎回SharedReferenceにコミットするようですが、Androidは新しいOutputStreamを開いてファイルに書き込み、それを閉じます。ソースコードは次のように変更する必要があります。

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(); 
    } 
    editor.commit(); 
} 
関連する問題