我将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有什么误解吗???
求教各位大牛,多谢多谢!!!