Android-自定义图像资源的使用及 Android SQLite性能分析

本文详细探讨了SQLite数据库在不同记录数下的性能表现,重点分析了SELECT操作、事务处理、内存管理等方面,提供了关于如何优化SQLite性能和内存使用的实用建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

普通图像资源
.XML图像资源
.Nine-patch图像资源
.XML Nine-patch图像资源
.图层(Layer)图像资源
.图像状态(state)资源
.图像级别(Level)资源
.淡入淡出(transition)资源
.嵌入(Inset)图像资源
.剪切(Clip)图像资源
.比例(Scale)图像资源
.外形(Shape)图像资源




1. 基本架构


先了解一下SQLite主要架构 (详见《The Definitive Guide to SQLite》), 需要关注的是Compiler和Backend两个模块。正因为有一个虚拟机的存在,所以才有了Compiled Statement的价值,因为它可以减少前置的编译时间,直接到VDBE上执行。而Backend端的Pager,则是重要数据管理者,真正决定者数据操作的性能,以及内存占用。


2. 性能


这次测试基于Sumsung i9103和Google Nexus S1进行。使用Python脚本及adb指令通过Intent操作Android应用进行数据库操作。


i. SELECT操作
首先观察到SELECT在不同记录数下的峰值分布,可见整体上有上升的趋势。正如SQLite官方说的它并不适合存储大量数据,一定要控制其中的记录数量。
另外SELECT操作性能也取决于查询的栏位个数,而@行云进一步确认和返回栏位的内容大小有关,也就是栏位的内容和多少也需要权衡。
ii. 关于事务
事务是提高SQLite操作性能的一个重要技术,特别是SQLite实现了WAL,使得事务与SELECT不会互斥,大大提高了应用的性能。参见附2。
iii. 不同机型的操作性能
先看SELECT操作的平均值在两种机型上的表现, 可以看到i9103上的波动性比较大,而Nexsus S1则一直保持稳定


3. 内存 


SQLite以Page为单位存储数据,默认一个Page有1024字节,然后通过B- Tree组织起来(Table使用B+ Tree组织)
Lookaside则是SQLite应用的内存管理的技术,优化了内存的使用效率,主要思想是先分配一整块内存, 分成若干个slots,然后SQLite再按需使用。这和许多小内存分配器的思想是一样的。
. cache的三个值分别是:
        Page Cache的命中次数、未命中次数,以及Page Cache个数。可以在Android源码中的SQLiteDebug.java以及ActivityThread.java找到细节的内容。
   . page size, db size的单位是KBytes, Lookaside(b)是指使用多少个Lookaside的slots。
   . 对于Heap和Overflow Pages,SQLiteDatabase的内存回收可能没有那么及时,可以调用SQLiteDatabase::releaseMemory()进行主动释放。


*使用SQLite的PRAGMA可以直接获取一些通过SQLiteDatabase获取不到信息,当然如果SQLite不支持,也会抛异常出来.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值