Tengo una función que ha estado funcionando bien durante mucho tiempo, que comienza
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 ()) { // errorEstoy usando esto para abrir y leer desde muchas pequeñas bases de datos SQLite, cada una ~200k, y al abrir la 1013 falla con
out of memory Error opening databaseLa carga de memoria total de la aplicación es ~200M, con gigabytes libres en la máquina.
Parece que estoy llegando a un límite que no sea la pura memoria. Cada objeto QSqlDatabase sale del alcance del bucle antes de que se cree el siguiente, estas bases de datos no existen al mismo tiempo y no puedo ver los límites de conexión mencionados en la documentación. Así que estoy confundido.
lsof informa sobre 200 identificadores de archivos abiertos antes de que comience este ciclo y alrededor de 1200 cuando termina, por lo que parece que Qt mantiene los identificadores abiertos después de ~QSqlDatabase , pero aún así, si ese es el límite, parece un poco bajo.
¿Tienes idea de lo que está pasando? Esto está en Ubuntu actualizado.
En primer lugar, QSqlDatabase es un singleton, por lo que el alcance no importa.
Intente cerrar la conexión antes de abrir una nueva.