Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Diablus от Ноябрь 08, 2011, 15:59



Название: Использование памяти
Отправлено: Diablus от Ноябрь 08, 2011, 15:59
Добрый День, такой вопрос.
Пишу программу с потенциально большим количеством обрабатываемых данных, вывожу таблицу, ориентировачно 900 000строк по 12столбцов и в каждой ячейке примерно около 20символов.
Как я понимаю оперативная память не резиновая, может произойти переполнение, как лучше реализовать хранение, обработку данных во время сеанса работы?
Хранить +-5000 записей таблицы от текущей, при прокрутке подгружая? Т.е. отслеживать номера и количество видимых ячеек, удаляя/подгружая данные из временного бинарного файла?


Название: Re: Использование памяти
Отправлено: alexman от Ноябрь 08, 2011, 16:06
Примерно так. Но надо учесть что чтение данных с жесткого может подтормаживать и при скроле это нервирует пользователя. Возможно, стоит вынести загрузку в отдельный поток.


Название: Re: Использование памяти
Отправлено: Igors от Ноябрь 08, 2011, 16:09
Сначала определиться как вообще "хранить", напр база или самопальный файл. Потом реализовать "каждая запись читается с диска" - медленно, но не смертельно. Потом поставить кэш (QCache)


Название: Re: Использование памяти
Отправлено: Diablus от Ноябрь 08, 2011, 16:40
Да, в отдельный поток разумно, и какие помимо того решения для подобных проблем используются?
Если оставлять подушку - в виде определённого кол-ва записей думаю нивелирует эффект под-торможения, удачное решение от Microsoft с их exel'ем приходит на ум, правда понятия не имею как реализовано, думаю что-то с временными файлами.
Буду создавать temp-копию всего файла данных(чуть дольше будет запускаться), держать его для чтения постоянно открытым, сохранять изменения в 2-3 новых темп файла ~ 15-30мб(возьмём максимум) места. При запуске программы просмотр истории (обновляемый, скрытый файл), вопрос пользователю о внесении/сохранении невнесённых изменений?

Хранить данные буду в своём файле со своим форматом - данные будут будут закрыты, а в чём преимусщества кэширования? Раньше не использовал, но так понимаю позволяет сохранять внесённые пользователем изменения, предотвращает потерю данных(сохраняет данные во временный файл?)?


Название: Re: Использование памяти
Отправлено: Igors от Ноябрь 08, 2011, 18:25
Да, в отдельный поток разумно..
Задано много вопросов, может и не мне, но попытаюсь ответить  :)

Я бы не стал так легковесно решать "свой файл", хотя питаю к СУБД глубокую неприязнь. Свой файл хорош если данные фиксированного размера. Понадобится строка напр 100 символов, пусть 1 раз - и что будете делать? Появятся новые поля - вставить их в свой файл не 5 минут. Понадобится сортировка, поиск и.т.п.

"Подушка" далеко не проста в реализации, придется довольно мучительно отлавливать все скроллы. Кэш намного приятнее т.к. его можно сбросить на нижний уровень и забыть. Др. словами есть ф-ция "прочитать запись", если она в кэше то берется оттуда, иначе загружается с диска и помещается в кэш