36

有多快SharedPreferences?有没有办法将它们放在内存中以供阅读?我有少量数据ListView需要查询才能显示每个单元格,我担心调用闪存会太慢。我不担心写入速度,因为写入很少发生。我正在考虑仅使用 JSON 对象而不是SharedPreferences. 有什么想法吗?

4

4 回答 4

61

有没有办法将它们放在内存中以供阅读?

在第一次引用之后,它们在内存中。第一次检索特定的SharedPreferences(例如PreferenceManager.getDefaultSharedPreferences())时,数据会从磁盘加载并保留。

于 2013-10-02T23:18:13.883 回答
19

我的建议是先测试你的表现,然后开始担心速度。一般来说,你会更喜欢一个优先考虑可维护性和速度的应用程序。当工程师在让应用程序稳定之前开始实现性能时,结果是应用程序运行速度更快但有很多错误。

于 2013-10-03T01:15:43.930 回答
11

根据链接,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 
于 2020-07-08T15:20:11.510 回答
-1

我有少量数据 ListView 必须查询才能显示每个单元格

你不能做一个单例,一个普通的类,然后从那里第二次阅读吗?我会那样做。

于 2013-10-02T23:22:53.793 回答