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