У меня есть функция, которая работает хорошо для возрастов, которая начинаетсяЯ нахожу ли я искусственные ограничения QSqlDatabase?
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, и при открытии 1013th один он терпит неудачу с
out of memory Error opening database
Общая нагрузка на приложение составляет ~ 200M, без гигабайта на машине.
Кажется, я нахожусь в пределе, кроме чистой памяти. Каждый объект QSqlDatabase выходит из области цикла до создания следующего, эти базы данных не все существуют одновременно, и я не вижу никаких ограничений на подключение, упомянутых в документации. Поэтому я смущен.
lsof сообщает о 200 открытых дескрипторах файлов до начала цикла и около 1200, когда он заканчивается, поэтому он выглядит так, что Qt сохраняет открытые дескрипторы после ~QSqlDatabase
, но все же, если это предел, это кажется немного низким.
Любая идея, что происходит? Это современный Ubuntu.
Документация для деструктора: 'Уничтожает объект и освобождает любые выделенные ресурсы. См. Также close(). 'Все еще кажется, что он протекает. – spraff
Итак? Деструктор QSqlDatabase не закрывает соединения db. – RazrFalcon