0
点赞
收藏
分享

微信扫一扫

系列七、ThreadLocal为什么会导致内存泄漏

酷子腿长一米八 2023-11-23 阅读 9

参考:

【精选】SQLite批量插入效率_sqlite 批量插入_PengX_Seek的博客-CSDN博客

(1)不使用事务时:

	clock_t t_start = clock();
	QSqlQuery query(db);
	QString sql("insert into test(col1,col2) values(1,2);");
	for (int i = 0; i < 1000; i++)
	{
		query.exec(sql);
		//qDebug() << query.lastError();
	}
	clock_t t_stop = clock();
	std::cout << "cost time " << (t_stop - t_start) << " ms" << std::endl;

每次使用SQL语句,都会打开和关闭数据库文件(共1000次)。

(2)使用事务时:

	clock_t t_start = clock();

	QSqlQuery begin(db);
	begin.exec("begin;");
	QSqlQuery query(db);

	QString sql("insert into test(col1,col2) values(1,2);");
	for (int i = 0; i < 1000; i++)
	{
		query.exec(sql);
		//qDebug() << query.lastError();
	}
	QSqlQuery commit(db);
	commit.exec("commit;");
	//commit.exec("end;");
    //使用end;效果一样
	clock_t t_stop = clock();
	std::cout << "cost time " << (t_stop - t_start) << " ms" << std::endl;

 只打开和关闭了一次数据库文件。

(3)我想导入数据库3500万条数据。

	clock_t t_start = clock();
	//3500万
	for (int j = 0; j < 3500; j++)
	{
		QSqlQuery begin(db);
		begin.exec("begin;");
		QSqlQuery query(db);
		for (int i = 0; i < 10000; i++)
		{
			QString sql = QString("insert into test(col1,col2) values(%1,2);").arg(j*10000+i);
			query.exec(sql);
		}
		qDebug() << j;
		QSqlQuery commit(db);
		commit.exec("commit;");
	}
	//commit.exec("end;");
	clock_t t_stop = clock();
	std::cout << "cost time " << (t_stop - t_start) << " ms" << std::endl;

时间有点久。

之前尝试只begin,commit一次,但感觉效果不好(猜测可能是一次提交的数据太多了)。 

(4)依然是导入3500万数据。

参考这篇文章:

Qt 使用SQLite的性能优化的亿点点记录-云社区-华为云 (huaweicloud.com)

	clock_t t_start = clock();
	//3500万
	for (int j = 0; j < 3500; j++)
	{
		QSqlQuery begin(db);
		begin.prepare("begin;");
		begin.exec();
		QSqlQuery query(db);
		for (int i = 0; i < 10000; i++)
		{
			query.prepare("insert into test(col1,col2) values(%1,2);");
			query.bindValue(":1", j * 10000 + i);
			query.exec();
		}
		qDebug() << j;
		QSqlQuery commit(db);
		commit.prepare("commit");
		commit.exec();
	}
	//commit.exec("end;");
	clock_t t_stop = clock();
	std::cout << "cost time " << (t_stop - t_start) << " ms" << std::endl;

速度也不快! 

举报

相关推荐

0 条评论