Название: [Решено] Тормозит QSqlTableModel Отправлено: Yegor от Июль 09, 2013, 14:54 Здравствуйте!
Есть таблица в БД, которую отображаю в приложении с помощью QSqlTableModel (только для просмотра). Делаю Код: m_pModel->setEditStrategy(QSqlTableModel::OnManualSubmit) Данные в таблице БД добавляются извне. Я, чтобы эти новые данные отобразить, одновременно эти же данные вставляю модель с помощью: Код: //New row. Я не делаю Код: m_pModel->select() Код: m_pModel->insertRows(0, 1) Но если в таблице базы данных накопилось много данных, то это программное добавление сильно тормозит программу. Тем сильнее, чем больше накопленных данных (десятки тысяч) и чаще программное добавление (50 в секунду). Я попробовал поменять модель - на QSqlQueryModel. Но она не подходит, потому что там не работает insertRow. Вопрос: как сделать, чтобы модель не тормозила? Название: Re: Тормозит QSqlTableModel Отправлено: VPS от Июль 09, 2013, 15:43 Непонятен смысл вот этого предложения: "Я, чтобы эти новые данные отобразить, одновременно эти же данные их в модель с помощью:..."
Также, что Вы имеете в виду под: "Данные в таблице БД добавляются извне"; из другого метода или программы? Название: Re: Тормозит QSqlTableModel Отправлено: Yegor от Июль 09, 2013, 16:24 Да, вставляю из другого метода.
Подскажите, пожалуйста, какие нибудь соображения, чтобы ускорить модель. Название: Re: Тормозит QSqlTableModel Отправлено: VPS от Июль 09, 2013, 19:33 Вам тут, наверное, нужно распараллеливать задачи.
Может это (http://www.linuxjournal.com/article/9602?page=0,0) чем-то поможет. Название: Re: Тормозит QSqlTableModel Отправлено: joker от Июль 10, 2013, 07:32 Мне вот непонятно:
- по мелочи - отображаешь же через QTableView? Может он и тормозит? - зачем руками добавлять строки - чтобы не перечитывать уже существующие строки. Тогда хотя бы проверь производительность своих действий (считай стандартными средствами табличку и по-твоему и измерь время - может тут надо искать? ) - А может не так уж и нужно отображать столько строк - пользователь все равно больше десяти-двадцати не воспринимает? Название: Re: Тормозит QSqlTableModel Отправлено: Bepec от Июль 10, 2013, 07:36 Я думаю известная проблема - что обновляете вы всю таблицу разом. Хотя кто вас знает - код не врёт, но кода нету :D
Название: Re: Тормозит QSqlTableModel Отправлено: panAlexey от Июль 10, 2013, 10:25 Вопрос: как сделать, чтобы модель не тормозила? отсмотреть профайлером узкие места и принять решение по ним.Название: Re: Тормозит QSqlTableModel Отправлено: Bepec от Июль 10, 2013, 10:41 Жаль только что нормальных профайлеров под окна немного :(
Название: Re: Тормозит QSqlTableModel Отправлено: lit-uriy от Июль 10, 2013, 11:32 >>чем больше накопленных данных (десятки тысяч)
а нефиг их в таком кол-ве туда совать. Оригинальная модель никогда столько за один присест не тянет. Используй нормальный способ с селектом. Название: Re: Тормозит QSqlTableModel Отправлено: Yegor от Июль 10, 2013, 12:15 Мне желательно отображать все данные.
А что такое "нормальный способ с селектом"? Название: Re: Тормозит QSqlTableModel Отправлено: lit-uriy от Июль 10, 2013, 14:06 заполнять модель методом select(), с ним не может ничего тормозить, т.к. он тянет только первые 300 записей, а остальные тянет только когда пользователь прокручивает таблицу.
Название: Re: Тормозит QSqlTableModel Отправлено: Yegor от Июль 10, 2013, 17:52 Заполнять модель методом select() не подходит, так как это тормозит еще больше, чем insertRow, setData.
Название: Re: Тормозит QSqlTableModel Отправлено: Yegor от Июль 14, 2013, 17:31 Проблему решил следующим образом: делаю select() модели каждые 10 секунд, с помощью таймера. Теперь все данные в модели обновляются, и не тормозит систему.
Название: Re: [Решено] Тормозит QSqlTableModel Отправлено: lit-uriy от Июль 14, 2013, 17:34 >делаю select() модели каждые 10 секунд
извращенец, других слов просто нет Название: Re: [Решено] Тормозит QSqlTableModel Отправлено: panAlexey от Июль 15, 2013, 00:41 >делаю select() модели каждые 10 секунд В 1Cv77 - 10 секунд по умолчанию. Но настраивается.извращенец, других слов просто нет Называется "Период опроса изменений Базы Данных (сек.):" Но там целая система кешей и оптимизаций. |