Название: Использование памяти Отправлено: 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 минут. Понадобится сортировка, поиск и.т.п. "Подушка" далеко не проста в реализации, придется довольно мучительно отлавливать все скроллы. Кэш намного приятнее т.к. его можно сбросить на нижний уровень и забыть. Др. словами есть ф-ция "прочитать запись", если она в кэше то берется оттуда, иначе загружается с диска и помещается в кэш |