我有一个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是一个单身人士,所以范围并不重要。
尝试关闭连接,然后再打开新的连接 。