我打人为QSqlDatabase限制?

我有一个function已经运行良好的年龄,从开始

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,机器上的千兆字节空闲。

看起来我正在打破记忆之外的极限。 在创build下一个QSqlDatabase对象之前,每个QSqlDatabase对象都会超出循环范围,这些数据库并非全部同时存在,而且我也看不到文档中提到的任何连接限制。 所以我很困惑。

在这个循环开始之前,lsof报告大约200个打开的文件句柄,大约1,200个文件句柄完成后,所以看起来Qt在~QSqlDatabase之后保持打开~QSqlDatabase ,但是如果这个限制看起来有点低的话。

任何想法发生了什么? 这是最新的Ubuntu。

首先 – QSqlDatabase是一个单身人士,所以范围并不重要。

尝试关闭连接,然后再打开新的连接 。