Android上的SQLLite性能分析
也许有人还不知道,Android 是有一些内建的 类库支持 SQL Lite 数据库的操作。他提供了一个很好的方式在 Android 上组织少量的数据。不管怎样,在使用这些类库的时候有一些陷阱是需要注意的。
根据你所使用的版本不同,一个相同的查询的运行时间可能从几毫秒到几分钟不等。例如,一个查询可能在 Galaxy S2 运行少于一秒(在 iPhone 4 上可能更快),但是在 Atrix 2 和 HTC Desire 上运行却需要一分钟。所有这些手机都有类似的硬件,那么区别在哪里?
在对代码研究了几天后,我发现问题在于查询语句的设计。当你使用大量的 joins 或者 unions 的时候,问题就出现了。组合一张大的数据表和一张或多张中等大小的数据表,需要非常小心的优化来保证在所有的设备上都有良好的性能。在做 unions 或者 joins 之前限制数据表的大小很重要!
我们以下面的数据库和数据表为例:
· 一张 Person 表,有 name, height, age 等字段
· 一张 Family 表,包含了家庭的详情
· 一张 City 表,包含了所有城市的信息
在 Android 上面把所有这些表联合起来(假设 Person 表有超过2000条记录)在大部分设备上是没有问题的。但是假如你的用户正在使用一个老版本的 SQL Lite 版本,你的应用就慢的无法使用了。你要尽量让 join 的记录越少越好以保证性能。例如,你从 Person 表中抽取一部分记录再做 join,性能就会好很多。
这里的难点是如何知道用户使用的是什么版本的 SQL Lite。虽然 Android 有一个默认的版本,但是似乎不同的厂商在不同的设备上用了不同的 SQL Lite 版本。这就给我们造成了很大的麻烦。
在 StackOverFlow 上有一些关于这方面的信息。总之尝试去获得设备的 SQL Lite 版本是很困难的,你最好还是把力气花在优化 SQL 上面,以保证在所有的设备上都有良好的性能。
还有一个有趣的地方就是 Android 上面,一条查询究竟是何时被执行的。也许你认为当你获得Cursor 对象的时候,查询就执行完了。但事实情况是,查询不会被执行直到 Cursor 被第一次访问,例如 moveToNext,moveToFirst 操作。所以请不要在 UI 线程或者相关的线程中使用 cursor,否则界面会卡死。
Android上的SQLLite性能分析的更多相关文章
- Linux性能分析工具的安装和使用
转自:http://blog.chinaunix.net/uid-26488891-id-3118279.html Normal 0 7.8 磅 0 2 false false false EN-US ...
- iocp性能分析
网络上找iocp性能分析的文章很少,因工作关系,花了点时间特意从客观数据和理论角度分析了下iocp的性能 环境 CPU i7 4核8线程 1G网卡,echo方式测试(一个客户机模拟多个客户端模式,模拟 ...
- Android开发之Java集合类性能分析
对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...
- Android APP性能分析方法及工具
近期读到<Speed up your app>一文.这是一篇关于Android APP性能分析.优化的文章.在这篇文章中,作者介绍他的APP分析优化规则.使用的工具和方法.我觉得值得大家借 ...
- android 性能分析案例
本章以实际案例分析在android开发中,性能方面的优化和处理.设计到知识点有弱引用,memory monitor,Allocation Tracker和leakcanary插件. 1.测试demo ...
- Android性能分析之TraceView的使用
TraceView简介 TraceView是AndroidSDK里面自带的工具,用于对Android的应用程序以及Framework层的代码进行性能分析. TraceView是图形化的工具,最终它会产 ...
- 正确使用Android性能分析工具——TraceView
http://blog.jobbole.com/78995/ 首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他技术 - 导航条 - 首页 最新文章 IT 职场 前端 - Ja ...
- Cocos2d-x性能分析-Android版本之Gprof
在 iOS 平台下我们可以用 Xcode 自带的 Profile 工具来测试我们程序的性能,Android 平台使用的 gprof 这里整理了一下具体的cocos2dx 使用gprof进行性能分析的具 ...
- 关于React Native项目在android上UI性能调试实践
我们尽最大的努力来争取使UI组件的性能如丝般顺滑,但有的时候这根本不可能做到.要知道,Android有超过一万种不同型号的手机,而在框架底层进行软件渲染的时候是统一处理的,这意味着你没办法像iOS那样 ...
随机推荐
- js获取字符串最后一个字符代码
方法一:运用String对象下的charAt方法 charAt() 方法可返回指定位置的字符. 代码如下 复制代码 str.charAt(str.length – 1) 请注意,JavaScript ...
- <转>如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等
原文链接:http://www.vaikan.com/use-multiple-cpu-cores-with-your-linux-commands/ 你是否曾经有过要计算一个非常大的数据(几百GB) ...
- 网络编程 --- URLConnection --- 读取服务器的数据 --- java
使用URLConnection类获取服务器的数据 抽象类URLConnection表示一个指向指定URL资源的活动连接,它是java协议处理器机制的一部分. URL对象的openConnection( ...
- 硬盘类型和Linux的分区
目前硬盘主要分为以下几种:IDE,SCSI,SATA,SAS.其中SAS(Serial Attached SCSI)即串行连接SCSI,属于SCSI的新一代技术. 以下是Linux常见设备的名称: 装 ...
- BIOS启动项中的设备都有哪些
Floppy 软式磁盘驱动器,简称FDD,也就是我们平时所说的软驱. CD-ROM 不用多说了,大家都知道,这是光盘驱动器,也就是我们平时说得光驱. SCSI SCSI的全名是:Small Compu ...
- 关于面试mysql优化的几点纪要
1.减少查询次数 ,如何减少 ? 2. 表结构优化,如何优化 ? 3. 列选取原则 ? 4.建索引原则 ? 5.mysql语句优化 ? 6.增加mysql处理性能 ? 通过这几点, 再来说 ...
- .gitignore 文件列表
GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表,你可以在https://github.com/github/gitignore 找到它.
- 何时使用hadoop fs、hadoop dfs与hdfs dfs命令
hadoop fs:使用面最广,可以操作任何文件系统. hadoop dfs与hdfs dfs:只能操作HDFS文件系统相关(包括与Local FS间的操作),前者已经Deprecated,一般使用后 ...
- Active Record快速入门指南
一.概述 Active Record(中文名:活动记录)是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录.关系型数据库往往通过外键来表述实体关系,A ...
- 使用CXF发布WebService服务简单实例
一.说明: 前面介绍了使用axis2来发布Webservice服务,现在介绍一种更popular,更高效的Webservice服务发布技术:CXF Apache CXF = Celtix + XFir ...