• 6714阅读
  • 11回复

[提问]QT中关于文件读写速度问题 [复制链接]

上一主题 下一主题
离线it小熊
 
只看楼主 倒序阅读 楼主  发表于: 2012-09-18
关键词: 数据文件读入
  QFile file("gc2_logs.las");

    if(!file.open(QIODevice::ReadOnly))
    {
        QMessageBox *messageError = new QMessageBox;
        messageError->setText("file open error");
        messageError->show();
    }

    QTextStream in(&file);
    double depth,y;
    double i=0;

while(!in.atEnd())
    {

        QString line = in.readLine();
        QStringList fields = line.split(' ',QString::SkipEmptyParts);
       if((depth = fields.takeFirst().toDouble()) >= 45.0000 &&depth<=800 && (y = fields.takeFirst().toDouble()) >= 45.0000)
       {
            depth = fields.takeFirst().toDouble();
            y = fields.takeFirst().toDouble();
            i++;
            qDebug()<<i;
            QString string = QString("INSERT INTO WellLogData(ID, LogID, DepthValue, LogValue) "
                                     "VALUES ('%1', 'p_wave' , %2, %4)"
                                     ).arg(i).arg(depth).arg(y);
           query.exec(string);
       }
    }
以上代码是我从 本地文件读取数据然后放入数据库中  大概有4万条   读取速度相当慢  10分中 1万条都不到 我想问下 时间是花
在什么地方的

请 大虾们 提个改进方案。 小弟在此感谢

苦逼 的 程序猿
离线it小熊
只看该作者 1楼 发表于: 2012-09-18
我把 判断 取消  效率还是没有变
苦逼 的 程序猿
离线计划

只看该作者 2楼 发表于: 2012-09-18
求答案啊,望高手赐教。
好好学习,天天向上。
离线jdwx

只看该作者 3楼 发表于: 2012-09-18
数据库有个东东叫“事物处理“把它打开。
要分两部分看,读文件和写入数据库,看看每个部分消耗的时间。

发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线XChinux

只看该作者 4楼 发表于: 2012-09-18
时间都花在数据库执行insert语句那里了。
为了加快速度,你可以批量读取若干行数据,然后事务处理插入一批。
当然,如果你内存足够,你可以把所有数据全读进来,然后执行一次事务即可。
QSqlDatabase有transaction(), commit(), rollBack()这几个方法供你用。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线it小熊
只看该作者 5楼 发表于: 2012-09-19
好的 谢谢 各位 大侠 。我试试先
苦逼 的 程序猿
离线it小熊
只看该作者 6楼 发表于: 2012-09-19
我就加了 两句代码  。搞定了 就10秒 左右

再次感谢
苦逼 的 程序猿
离线计划

只看该作者 7楼 发表于: 2012-09-19
谢谢!
好好学习,天天向上。
离线zbin349
只看该作者 8楼 发表于: 2012-09-19
回 6楼(it小熊) 的帖子
魂淡 加了两句什么啊 也不说
离线it小熊
只看该作者 9楼 发表于: 2012-09-19
就是 在 循环前 加一个
QSqlDatabase::database().transaction();
`
`
`
循环结速 提交
QSqlDatabase::database().commit();

OVER
苦逼 的 程序猿
离线it小熊
只看该作者 10楼 发表于: 2012-09-19
但是 我还是没有明白 ,
我就加了 两句代码 怎么效率提高了 这么多。
   这两句的代码是不是 把这些数据 放入一个临时表 ,然后一次提交呢?

求 解释。
苦逼 的 程序猿
离线zbin349
只看该作者 11楼 发表于: 2012-09-19
4楼就是解释 你没理解  可查看书籍 关于数据库事务控制方面
改之前 你是 读写读写读写读写读写读写读写读写...end
改之后 是 读写写写写写写...end 当然快了
快速回复
限100 字节
 
上一个 下一个