Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.25;
Скачать: CL | DM;

Вниз

Динамически подгружать данные в массив   Найти похожие ветки 

 
Dima_dvp   (2005-11-28 14:34) [0]

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

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

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

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

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

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


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

MSDN "memory-mapped files"

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


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

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


 
Leonid Troyanovsky ©   (2005-11-28 16:01) [3]


> Dima_dvp   (28.11.05 15:52) [2]

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


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

--
Regards, LVT.


 
tesseract ©   (2005-11-29 10:10) [4]


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


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


 
Deka ©   (2005-11-29 14:17) [5]

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


 
tesseract ©   (2005-11-29 20:45) [6]


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

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


 
Джо ©   (2005-11-29 21:05) [7]


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

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


 
Deka ©   (2005-11-30 14:45) [8]

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



Страницы: 1 вся ветка

Текущий архив: 2005.12.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.059 c
2-1133874397
vol
2005-12-06 16:06
2005.12.25
Exel в гриде


14-1133594934
Sven
2005-12-03 10:28
2005.12.25
Задачка...


14-1132867755
TStas
2005-11-25 00:29
2005.12.25
МП


2-1134132952
sanich
2005-12-09 15:55
2005.12.25
Имборт из FoxPro в Firebird


14-1133295820
Shopot
2005-11-29 23:23
2005.12.25
Где достать компоненты для работы с Com портом?