搬砖的哈哈 2019-12-20 17:00 采纳率: 22.2%
浏览 881

Qt从数据库读取数据写入文件时内存溢出

我将400万行字符串(每行大概33byte)插入了数据库及中,当我再从数据库中把这些数据写入文件时,程序崩溃了,提示内存溢出

**In file ..\..\include/QtCore/../../src/corelib/tools/qvector.h, line 508: Out of memory**

以下是写入文件的代码:

if (!m_database->m_db.open())     //m_db是数据库名
      return;

m_database->m_db.transaction();
QSqlQuery query(m_database->m_db);
bool ret = query.exec("select * from validation order by VALIDATION asc");   //这是按照字段VALIDATION来升序排序表中数据后取所有数据,不知道这样好不好,还是说该按照一行一行的来取
if (!ret)
{
      qDebug() << query.lastError().driverText() << endl;
      return;
}

unsigned int line = 0;
while (query.next())
{
    QString content = QString("%1\n").arg(query.value(0).toString());

    valfile.write(content.toLatin1());  //valfile是QFile类型,要写入的文件
    line++;
    if (line >= 1000){
       line = 0;
       valfile.flush();  //flush在这里不知道用的对不对
       qDebug() << "size of file after flush: " << valfile.size() << endl;
    }
}

m_database->m_db.commit();

在以上代码中,我想,因为数据量太大,那么每次写到文件中1000行,我就flush刷新一下缓冲区,把数据都存入文件,这样缓冲区就空了,就可以继续写。然而我一直盯着任务管理器看,程序在写入文件时内存占用一直在上升,知道程序崩溃,提示内存溢出。

难道是我对缓冲区和flush有什么误解吗???

求教各位大牛,多谢多谢!!!

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-20 17:50
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器