【发布时间】:2011-02-06 15:23:45
【问题描述】:
我需要在 onCreate() 中根据存储在 SharedPrefrences 中的值读取一些值... 所以我可以在许多 if elseif 语句或从数据库中读取值之后获得我想要的值! 哪个会更快?多个 if 或从数据库中搜索和读取?
【问题讨论】:
标签: android database if-statement performance
我需要在 onCreate() 中根据存储在 SharedPrefrences 中的值读取一些值... 所以我可以在许多 if elseif 语句或从数据库中读取值之后获得我想要的值! 哪个会更快?多个 if 或从数据库中搜索和读取?
【问题讨论】:
标签: android database if-statement performance
ifs 本身不是问题。如果它们不调用 CPU 密集型函数,那么它们将非常快,尤其是在 Froyo 或更高版本上,这要归功于 JIT。 从 DB 读取可能非常快,但也可能非常慢。 NAND 在性能方面是不可预测的,并发 I/O 会导致明显的延迟。如果您确定不在 if 中调用重量级函数,我会使用它们。
最好的方法是将代码部分包装在 // 开始跟踪到“/sdcard/calc.trace” Debug.startMethodTracing("calc"); // ... // 停止追踪 Debug.stopMethodTracing(); (取自http://developer.android.com/guide/developing/tools/traceview.html)。然后从 sdcard 中获取文件,在 Traceview 中打开并比较两种选择。另一种更简单的方法是 Log.d (TAG, "Start: " + System.currentTimeMillis ());,做你的代码,然后 Log.d (TAG, "End: " + System.currentTimeMillis ());对两种选择都这样做,看看哪一种更快。
在此处阅读有关该主题的更多信息:http://developer.android.com/guide/practices/design/performance.html
【讨论】:
同意@kread,但这是我的通知。 至于我从数据库读取不应该在 onCreate() 方法中执行,因为它是一个 IO 操作。它可以明显阻塞 GUI 线程。我应该将数据库查询移至单独的线程。
【讨论】: