Memory 内存碎片会影响sqlite3的性能

Memory 内存碎片会影响sqlite3的性能,memory,memory-management,sqlite,Memory,Memory Management,Sqlite,在我的申请表中有以下顺序 使用蓝牙的PBAP从手机下载联系人 将这些联系人写入使用SQLite创建的自定义数据库。 我使用零malloc选项配置SQLite,并提供1MB缓冲区作为堆使用,还使用其他优化,如单个事务中的所有行插入,PRAGMA journal\u mode=MEMORY,PRAGMA synchronous=OFF和PRAGMA count\u changes=OFF 在写入数据库后,我从数据库中读取联系人,并为所有联系人姓名创建语音发音。这种语音发音算法使用的动态内存分配太多

在我的申请表中有以下顺序

  • 使用蓝牙的PBAP从手机下载联系人

  • 将这些联系人写入使用SQLite创建的自定义数据库。 我使用零malloc选项配置SQLite,并提供1MB缓冲区作为堆使用,还使用其他优化,如单个事务中的所有行插入,
    PRAGMA journal\u mode=MEMORY
    PRAGMA synchronous=OFF
    PRAGMA count\u changes=OFF

  • 在写入数据库后,我从数据库中读取联系人,并为所有联系人姓名创建语音发音。这种语音发音算法使用的动态内存分配太多

  • 现在,如果我在一次执行中按顺序重复上述3个步骤,3次,我将得到以下结果

    第一次:联系人在5秒内下载,数据库在10秒内创建

    第二次:联系人在5秒内下载,数据库在60秒内创建

    第三次:联系人在5秒内下载,数据库在500秒内创建

    现在我从我的应用程序中删除了语音创建,并再次重复了3次。现在的结果是

    第一次:联系人在5秒内下载,数据库在10秒内创建

    第二次:联系人在5秒内下载,数据库在10秒内创建

    第三次:联系人在5秒内下载,数据库在10秒内创建

    我发现了发音创建的问题,即在创建发音时,内存变得支离破碎,这影响了SQLite的性能

    但是,我为SQLite配置了Heap并启用了MEMSYS5,甚至影响了碎片


    请给出解决此问题的建议。

    使用标准分配器时会发生什么情况?第一次数据库创建时间为15秒,并从下次开始不断增加。我发现问题是由于多个malloc和发音创建中的free造成的。我在发音创建中使用私有堆(Windows函数),尽管它会影响下一次的数据库创建。