![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамически подгружать данные в массив [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 :) и уж конечно меньше Вашей месячной зарплаты :)))