Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамически подгружать данные в массив [D7, WinXP]


Dima_dvp ©   (2005-11-28 14:34:00) 

Здаврсвуйте.

Разрабатываю программу, выводящую на экран информацию о сигналах, заранее записанную с АЦП.
Т.е. данные представляют из себя файл array of array of Integer
Причём сигналов не много. Велико количество кадров. Общий объём данных доходит до Гигабайта (10 каналов оцифрованные в течении ~15 минут с частотой 10КГц).

Задача простая - вывести осцилограмму всех сигналов на одной координатной сетке и обеспечить удобство его визуального анализа.

Возникла следующая проблема: открытие файла данных (его полная загрузка в пямять) занимает слишеком много времени. А с учётом нехватки физической памяти при больших объёмах, время открытие возрастает ещё на порядок.

Сейчас данные по каждому каналу тупо загружаются в array of Integer. Это удобно и просто, но не при таких объёмах.

Вопрос: Как мне организовать динамическую подгрузку данных из файла, при этом не лишаясь возможности обращатся к элементам ВСЕГО массива по индексам, как это было при полной загрузке в array of Integer?
Полагаю, что нужно организовать класс, который бы по индексу определял, есть ли данные в памяти или их нужно подргузить. При этом он также должен высвобождать не используемые в данный момент данные.
Или не так? Подскажите


Deka   (2005-11-30 14:45:00) [1]

Вот и я где-то читал про то, что можно отобразить только часть файла.


Джо   (2005-11-29 21:05:00) [2]


>  [6] tesseract ©   (29.11.05 20:45)
>
> > Как я понял можно отобразить в память не весь файл, а
> какую-
> > то часть. Остается только вовремя менять отображенные
> в
> > память куски соотвествующие части файла.
>
> На сколько я понял нет. Отображается весь файл.

MapViewOfFile может отображать либо весь файл, либо заданную его часть (определенное кол-во байт, начиная с n-ой позиции).


tesseract   (2005-11-29 20:45:00) [3]


> Как я понял можно отобразить в память не весь файл, а какую-
> то часть. Остается только вовремя менять отображенные в
> память куски соотвествующие части файла.

На сколько я понял нет. Отображается весь файл. Но считываются те куски к которым реально идёт запрос(как страницы в памяти)


Deka   (2005-11-29 14:17:00) [4]

Как я понял можно отобразить в память не весь файл, а какую-то часть. Остается только вовремя менять отображенные в память куски соотвествующие части файла.


tesseract   (2005-11-29 10:10:00) [5]


> И действительно в памяти будут оказываться только те куски
> файла, к которым я чейчас обращаюсь?


Скажем так все exe файлы не копируются в память а проецируются в неё. Поэтому их лучше не удалять во время работы.  
Алгоритм проецирования в память использует, тот же механизм что и  файл подкачки. (C) М.Руссинович


Leonid Troyanovsky   (2005-11-28 16:01:00) [6]


> Dima_dvp   (28.11.05 15:52) [2]

> И действительно в памяти будут оказываться только те куски
> файла, к которым я чейчас обращаюсь?


Скажем так: в "памяти" будет находится то, что MapViewOfFile.

--
Regards, LVT.


Dima_dvp   (2005-11-28 15:52:00) [7]

А этот mapped создаст ощущение, что файл в памяти, а он на самом деле будет на диске? :-)
И действительно в памяти будут оказываться только те куски файла, к которым я чейчас обращаюсь?


Котик-братик   (2005-11-28 15:48:00) [8]

MSDN "memory-mapped files"

PS: Гигабайт памяти это не так уж и много - около $100 и это в несколько раз дешевле чем используемый ADC :) и уж конечно меньше Вашей месячной зарплаты :)))


Наверх

Титульная страница Поиск, карта сайта Написать письмо