我的申请中有以下顺序。
使用蓝牙的PBAP从手机下载联系人。
将这些联系人写入使用SQLite创建的自定义数据库。
我使用Zero-malloc选项配置了SQLite,并将1MB缓冲区用作堆,并使用其他优化,例如单个事务中的所有行插入,PRAGMA journal_mode = MEMORY
,PRAGMA synchronous = OFF
和PRAGMA count_changes = OFF
。
写入数据库后,我正在从数据库中读取联系人并为所有联系人姓名创建语音发音。这种语音发音算法使用动态内存分配太多了。
现在,如果我重复上述3个步骤,在单次执行中按顺序重复3次,我会得到以下结果。
第一次: 5秒后下载的联系人,10秒内创建的数据库
第二次:在5秒内下载的联系人,在60秒内创建的数据库
第3次: 5秒后下载的联系人,500秒内创建的数据库
现在我从我的应用程序中删除了语音发音,并重复了3次。现在结果是
第一次: 5秒后下载的联系人,10秒内创建的数据库
第二次: 5秒后下载的联系人,10秒内创建的数据库
第3次: 5秒后下载的联系人,10秒内创建的数据库
我发现发音创建的问题,内存在创建发音时碎片化,并且它影响了SQLite 的性能,以供下次使用。
但是,我为SQLite配置了Heap并启用了MEMSYS5,甚至影响了碎片。
请提出解决此问题的建议。