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那样 ...
随机推荐
- C++标准转换运算符 --四种
具体归纳如下: reinterpret_cast 函数将一个类型的指针转换为另一个类型的指针. 这种转换不用修改指针变量值存放格式(不改变指针变量值),只需在编译时重新解释指针的类型就可做到.rein ...
- leetcode–jump game II
1.题目描述 Given an array of non-negative integers, you are initially positioned at the first index of t ...
- springMVC的详细步骤配置
使用springMVC也可以代替struts2,当然只是代替业务分发的功能,struts2的一些其他功能它是没有的,不然要struts2有什么用. 下面我用springMVC代替struts2去整合h ...
- 从数列1,2,3.......n 中 随意取几个数,使其和等于 m
//从数列1,2,3.......n 中 随意取几个数,使其和等于 m public static void Print(int n, int m, List<int> ...
- 企业部署Linux应用将拥有更低的整体拥有成本
企业部署Linux应用将拥有更低的整体拥有成本 使用Linux能为企业的IT解决方案降低TCO(整体拥有成本Total Cost of The Ownership)吗?在面临这个问题时,很多企 ...
- 各种less开发工具
less是前端开发CSS的神器,但如何让less代码语法高亮,智能提示,快速编译及格式化,这不是一般的IDE的less插件能做到.下面是我搜刮到的一些工具 Codekit - incident57又一 ...
- 判定元素正在插入到DOM树——DOMNodeInsertedIntoDocument
在firefox, webkit中我们可以使用DOMNodeInsertedIntoDocument事件,但这个事件很快变废弃了,虽然浏览器还是很有节操地支持它们,但哪一天不在也很难说.比如说fire ...
- 架设证书服务器 及 让IIS启用HTTPS服务
一.架设证书服务器(CA服务)1.在系统控制面板中,找到“添加/删除程序”,点击左侧的“添加/删除windows组件”,在列表中找到“证书服务”,安装之.2.CA类型,这里有四种选择,这里以“独立根C ...
- HDU 4596 Yet another end of the world (数学,扩展欧几里德)
题意:给出n组x,y,z.判断是否存在一个id使得id%x1∈(y1,z1),id%x2∈(y2,z2). 析: 设 id/x1=a , id/x2=b ,则 id-a*x1=u; (1) id- ...
- 解决sencha touch显示.JSON包含中文数据时显示乱码问题
按照ST官方示例navigationview做的一个示例.数据源是一个.json文件.但是显示的时候如果.json文件里有中文则乱码.我知道是编码问题,但是不知道怎么改,如何改. 问了N个人最后解决方 ...