Android性能优化:微信自用高性能持久化框架—,Android面试必问

本文介绍了微信内部使用的高性能持久化框架MMKV,它在数据序列化中采用protobuf,通过增量更新和空间管理优化写入性能。MMKV在读写性能上优于SharedPreferences和SQLite,尤其在多进程场景下表现出色。文章还提供了MMKV的快速入门、性能对比和适用建议,指出其在大文件支持和内存管理上的限制,并讨论了多进程同步和数据监听等问题。
摘要由CSDN通过智能技术生成
  • 数据组织

数据序列化方面我们选用 protobuf 协议,pb 在性能和空间占用上都有不错的表现。

  • 写入优化

考虑到主要使用场景是频繁地进行写入更新,我们需要有增量更新的能力。我们考虑将增量 kv 对象序列化后,append 到内存末尾

这样同一个 key 会有新旧若干份数据,最新的数据在最后;那么只需在程序启动第一次打开 mmkv 时,不断用后读入的 value 替换之前的值,就可以保证数据是最新有效的。

  • 空间增长

使用 append 实现增量更新带来了一个新的问题,就是不断 append 的话,文件大小会增长得不可控。我们需要在性能和空间上做个折中。

以内存 pagesize 为单位申请空间,在空间用尽之前都是 append 模式;当 append 到文件末尾时,进行文件重整、key 排重,尝试序列化保存排重结果;

排重后空间还是不够用的话,将文件扩大一倍,直到空间足够。

  • 数据有效性

考虑到文件系统、操作系统都有一定的不稳定性,我们另外增加了 crc 校验,对无效数据进行甄别。

更详细的设计原理参考 MMKV 原理

快速上手

dependencies {

implementation ‘com.tencent:mmkv:1.0.23’

// replace “1.0.23” with any available version

}

MMKV的使用非常简单,

所有变更立马生效,无需调用 sync、apply。

在 App 启动时初始化 MMKV,设定 MMKV 的根目录

(默认/data/data/xxx.xxx/files/mmkv/)

(sp存储在/data/data/xxx.xxx/shared_prefs/)

支持从SP迁移数据importFromSharedPreferences

MMKV 还额外实现了一遍 SharedPreferences、SharedPreferences.Editor 这两个 interface

// 可以跟SP用法一样

SharedPreferences.Editor editor = mm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值