SharedPreferences
有多快?有没有办法将它们放在内存中以供阅读?我有少量数据,ListView
必须查询才能显示每个单元格,我担心调用闪存会太慢。我不担心写入速度,因为写入很少发生。我正在考虑只使用 JSON 对象来保存数据而不是SharedPreferences
。有什么想法吗?
有没有办法把它们放在记忆中以便阅读?
它们在内存中,在第一次引用之后。第一次检索特定的
SharedPreferences
(例如,PreferenceManager.getDefaultSharedPreferences()
)时,数据将从磁盘加载并保存。
我的建议是先测试你的性能,然后再开始担心速度。一般来说,您会更喜欢优先考虑可维护性和速度的应用程序。当工程师在让应用程序稳定之前就开始实现性能时,结果是应用程序运行得更快但有很多错误。
根据this链接,
getSharedPreferences
并没有那么重,因为它只在您第一次调用getSharedPreferences
时打开文件:
// There are 1000 String values in preferences
SharedPreferences first = context.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);
// call time = 4 milliseconds
SharedPreferences second = context.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);
// call time = 0 milliseconds
SharedPreferences third = context.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);
// call time = 0 milliseconds
但是使用
get
方法第一次调用需要一些时间:
first.getString("key", null)
// call time = 147 milliseconds
first.getString("key", null)
// call time = 0 milliseconds
second.getString("key", null)
// call time = 0 milliseconds
third.getString("key", null)
// call time = 0 milliseconds
对大文件感兴趣的人的另一个基准。下面的代码片段在 2013(?) 三星 SMT-350 平板电脑(1.2 GHz 四核,高通)上运行显示:
注意:文件创建在 5500 时崩溃,但继续没有问题。我不建议使用 70MB SP,这是为了不太可能的边缘案例测试和 100 倍过度测试。
G.logTime("MAKE HUGE FILE", true);
String sevenKString = App.getAsset(this, "sample_map.txt");
SharedPreferences.Editor spf = getSharedPreferences("TEST", Context.MODE_PRIVATE).edit();
G.logTime("SP OPEN", false);
for (Integer i = 0; i < 10000; i++) {
spf.putString(i.toString(), sevenKString);
spf.apply();
G.logTime("SP ADD " + i.toString() + " (" + (7 * i) + ")", false);
}
G.logTime("SP OPEN", true);
SharedPreferences sp = getSharedPreferences("TEST", Context.MODE_PRIVATE);
for (Integer i = 1; i < 10000; i += 10) {
file = sp.getString(i.toString(), null);
G.logTime("SP READ = " + i.toString(), false);
}
我有少量数据需要 ListView 查询 显示每个单元格
你不能做一个单身人士,一个普通的班级,然后从那里第二次读吗?我会那样做。