gpt4 book ai didi

linux - 我是否达到了人为的 QSqlDatabase 限制?

转载 作者:太空狗 更新时间:2023-10-29 12:28:15 25 4
gpt4 key购买 nike

我有一个多年来一直运行良好的功能,开始

QSqlDatabase
DBUtil :: basic_open (const QString & path)
{
static int connection_num = 0;
static const QString CONNECTION_NAME = "Connection%1";

QSqlDatabase db = QSqlDatabase :: addDatabase (
"QSQLITE",
CONNECTION_NAME .arg (connection_num++));

db .setDatabaseName (path);

if (false == db .open ())
{
// error

我正在使用它来打开许多小型 SQLite 数据库并从中读取数据,每个大约 200k,并且在打开第 1013 个数据库时失败

 out of memory Error opening database

应用程序的总内存负载约为 200M,机器上有 GB 的空闲空间。

除了纯粹的内存之外,我似乎已经达到了极限。在创建下一个 QSqlDatabase 对象之前,每个 QSqlDatabase 对象都超出循环范围,这些数据库并不是同时存在的,我看不到文档中提到的任何连接限制。所以我很困惑。

lsof 报告此循环开始前约有 200 个打开的文件句柄,结束时约有 1,200 个,因此看起来 Qt 在 ~QSqlDatabase 之后保持句柄打开,但仍然,如果这是限制的话好像有点低。

知道发生了什么事吗?这是在最新的 Ubuntu 上。

最佳答案

首先 - QSqlDatabase 是一个单例,所以范围无关紧要。

尝试close connection在打开新的之前。

关于linux - 我是否达到了人为的 QSqlDatabase 限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35470198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com