Название: QSqlTableModel with QSqlQuery Отправлено: developer от Январь 22, 2008, 20:18 Здравствуйте, скажите пожалуйста, з чем лучше работать: з qsqltablemodel или qsqlquery, если стоит вопрос економии памяти. Например, есть tableWidget, его можно заполнить с помощью qsqltablemodel:
//========================== model->setTable("operacii"); model->setFilter("Npr_id = 5 and CurDate > '2002.01.01'"); model->select(); tableWidget->setColumnCount(model->columnCount()); tableWidget->setRowCount(model->rowCount()); for(int row = 0; row < model->rowCount() ; row++) for(int col = 0; col < model->columnCount(); col++) tableWidget->setItem(row, col, new QTableWidgetItem(model->data(model->index(row,col)).toString())); //============================= Или с помощью qsqlquery: //========================= QSqlQuery query("select * from some_table"); QSqlQuery rowCount("select count(*) from some_table"); rowCount.seek(0); tableWidget->setColumnCount(query.count()); tableWidget->setRowCount(rowCount.value(0).toInt()); while(query.next()) { tableWidget->setItem(row,col, new QTableWidget(query.value().toString())); } //здесь неполный код,но ето неважно. //========================= Теперь вопрос к всем кто может помочь: Где используеться меньше памяти в первом или втором варианте. Профайлером или подобными программами не пользуюсь. Название: Re: QSqlTableModel with QSqlQuery Отправлено: ритт от Январь 22, 2008, 21:12 qsqlquery жрёт меньше
правда, если ты на таких объёмах собрался экономить, лучше вообще отказаться от кутей Название: Re: QSqlTableModel with QSqlQuery Отправлено: Alex03 от Январь 23, 2008, 08:09 Код: while(query.next()) Код: while(query.next()) Если Вы удаляете модель после заполнения tableWidget, то остаётся только tableWidget с кучей QTableWidgetItem-ов внутри (подозреваю что ещё и в своей внутренней модели). Т.е. оба способа одинаковы по расходу памяти после удаления модели. А вот если бы вы в первом случае пользовали QTableView (передав ему свою QSqlTableModel) вместо QTableWidget то скорее всего по памяти съэкономили бы. Название: Re: QSqlTableModel with QSqlQuery Отправлено: ритт от Январь 23, 2008, 12:41 я говорил непосредственно о qsqlquery :)
если нужно сэкономить память, то лучше использовать QTableView вместо QTableWidget если _необходимо_ экономить память, то вместо использования qsqltablemodel можно отнаследоваться от абстрактной модели, при построении делать два квери (описания столбцов + примари кей) и при отображении данных каждый раз выбирать нужные по примари кей и отображаемым столбцам (без кеширования) - в таком случае производительность заметно упадёт, например, плавной прокрутки вьюхи не получится мне кажется, игра не стоит свеч Название: Re: QSqlTableModel with QSqlQuery Отправлено: _govorilka от Январь 23, 2008, 14:18 Я тоже думаю, что игра не стоит свеч. В данном примере лучше думать не о количестве памяти, а об скорости работы программы. Если думать об оптимизации, то я взял QTableView + модельку унаследованную от QAbstractItemModel, написанную как обвертку над C API какого-либо SQL-сервера (например MySQL или PostgreySQL).
Название: Re: QSqlTableModel with QSqlQuery Отправлено: ритт от Январь 23, 2008, 14:50 говорилка, было бы интересно взглянуть...
если не жалко, кинь на форум или в личку з.ы. если жалко, забаню :) Название: Re: QSqlTableModel with QSqlQuery Отправлено: Tonal от Январь 23, 2008, 19:47 У нас работает именно так, как _govorilka описал.
Правда из на python. :) |