Russian Qt Forum
Май 08, 2024, 23:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Использование памяти  (Прочитано 1999 раз)
Diablus
Гость
« : Ноябрь 08, 2011, 15:59 »

Добрый День, такой вопрос.
Пишу программу с потенциально большим количеством обрабатываемых данных, вывожу таблицу, ориентировачно 900 000строк по 12столбцов и в каждой ячейке примерно около 20символов.
Как я понимаю оперативная память не резиновая, может произойти переполнение, как лучше реализовать хранение, обработку данных во время сеанса работы?
Хранить +-5000 записей таблицы от текущей, при прокрутке подгружая? Т.е. отслеживать номера и количество видимых ячеек, удаляя/подгружая данные из временного бинарного файла?
Записан
alexman
Гость
« Ответ #1 : Ноябрь 08, 2011, 16:06 »

Примерно так. Но надо учесть что чтение данных с жесткого может подтормаживать и при скроле это нервирует пользователя. Возможно, стоит вынести загрузку в отдельный поток.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Ноябрь 08, 2011, 16:09 »

Сначала определиться как вообще "хранить", напр база или самопальный файл. Потом реализовать "каждая запись читается с диска" - медленно, но не смертельно. Потом поставить кэш (QCache)
Записан
Diablus
Гость
« Ответ #3 : Ноябрь 08, 2011, 16:40 »

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

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

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Ноябрь 08, 2011, 18:25 »

Да, в отдельный поток разумно..
Задано много вопросов, может и не мне, но попытаюсь ответить  Улыбающийся

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

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


 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 22.