QT创建者+SQLite.插入速度非常慢
QT Creator + SQLite. Insert Very slow
我制作了一个在Windows 32位中运行的小型终端应用程序。
此应用程序从UDP端口侦听并在SQLite数据库上写入数据
代码:
#include <QUdpSocket>
#include <QTextStream>
#include <QSqlDriver>
#include <QSqlDatabase>
#include <QSqlQuery>
int main()
{
int i;
QTextStream qout(stdout);
//db conn or create db
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setHostName("localhost");
db.setDatabaseName("C:\db_test\db.sqlite");
db.open();
//create db structure
QSqlQuery *query = new QSqlQuery(db);
query->prepare("CREATE TABLE "
"MYTABLE("
"FIELD_1 VARCHAR(100) NOT NULL, "
"FIELD_2 VARCHAR(100) NOT NULL)"
);
if(query->exec() == true){
qout << "New Database Created" << endl;
} else {
qout <<"Database Alredy Exists" << endl;
}
//start UDP listener
QUdpSocket *udpSocket = new QUdpSocket(0);
udpSocket->bind(7755, QUdpSocket::ShareAddress);
i=1;
while (udpSocket->waitForReadyRead(-1)) {
while(udpSocket->hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());
QHostAddress sender;
quint16 senderPort;
udpSocket->readDatagram(datagram.data(), datagram.size(),
&sender, &senderPort);
QString Rec_Data = datagram.data();
QString Sender_Address = sender.toString();
QString InsertStr = "INSERT INTO MYTABLE VALUES (:val1, :val2)";
qout << InsertStr << " " << i << endl;
query->prepare(InsertStr);
query->bindValue(":val1", Rec_Data);
query->bindValue(":val2", Sender_Address);
if(query->exec() == true){
qout << "Data stored" << endl;
} else {
qout <<"Store Error" << endl;
}
i=i+1;
}
}
}
我每分钟需要处理大约20000个查询,但当我运行(Ctrl+R)时,它每分钟处理大约500个查询。
我知道出了什么问题,但我不知道是什么。
将多个INSERT操作批处理到单个事务中。
单独执行插入操作会将吞吐量限制在每秒60次左右,因为当SQLite进行写后读取验证时,硬盘驱动器磁盘必须完全旋转。
进一步阅读
INSERT真的很慢-我每秒只能执行几十次INSERT
相关文章:
- 为什么在读取文件大小时文件IO速度会发生变化
- OpenGL大的3D纹理(>2GB)非常慢
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 文件系统:复制功能的速度秘诀是什么
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- cl 生成的可执行文件在第一次运行时运行速度非常慢
- cmd 中的信息闪烁和更新速度非常快
- std::tan()在更新glibc后速度非常慢
- 嵌套的lambda表达式在用Visual C++编译和生成巨大的对象文件时速度非常慢
- QT创建者+SQLite.插入速度非常慢
- 导致CreateFile调用串行端口的速度非常慢的原因
- 对于非常接近零的值,双重计算运行速度要慢得多
- OpenGL对象在PC上以正常速度旋转,但在笔记本电脑上非常快
- 在OS X 10.8上使用SDL 2启动速度非常慢
- QTextEdit插入和删除行的速度非常慢.无论如何,让它更快
- 如果Windows资源管理器正在运行,Direct3D应用程序运行良好,否则速度会非常慢
- QTcpSocket每~0.5s才读取一次数据,即使是非常小的数据包,任何方法都可以加快速度
- 执行系统命令的速度非常慢
- SFML绘制OpenGL到多个窗口的速度非常慢