Qt QString获得大量内存

Qt QString gets a lot of memory

本文关键字:内存 QString Qt      更新时间:2023-10-16

执行下面的代码后,我看到

encoded = QString(DicResourceByteArray.toBase64().data());

占用太多内存。大约60 mb。

如何从内存中释放它?

Dic_block DicBlock;
qint64 Count;
int pos, len;
QByteArray DicResourceByteArray;
QDataStream out(&DicResourceByteArray, QIODevice::WriteOnly);
QString encoded;
while(DicInstance.readBlock(DicBlock))
{
    if(DicBlock.type == 2)
    {
        pos = 0;
        len = (unsigned char)DicBlock.data[pos++];
        std::string filename( DicBlock.data+pos, len );
        pos += len;
        out.writeRawData(DicBlock.data + pos, DicBlock.length - pos);
        encoded = QString(DicResourceByteArray.toBase64().data());
        QString strQuery = QString("INSERT INTO Dictionary_Resources([FileName], [ImageBasedOn64]) values('%1', '%2')").arg(QString::fromStdString(filename), encoded);
        query->exec(strQuery);
        delete encoded;

    }
}
delete query;
db.close();
//...
DicInstance.close();

第一件事:用.toBase64().constData()抓取数据数组,这避免了可能的数据副本。

第二件事:将QString encoded;的声明移动到if块中,这确保了,在if块内存被释放后。

第三件事:移除delete encoded; !

您不需要delete encoded, QString将在块结束时自动删除(并从内存中释放)。

encoded的内容复制到strQuery中是非常低效的。将其绑定为查询中的值。