Главная страница
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.039 c
14-1133232592
TheEd
2005-11-29 05:49
2005.12.25
Преобразование числа в прописной текст


2-1134390880
De1uxe
2005-12-12 15:34
2005.12.25
Где ошибка?


14-1133624702
GudzonXXX
2005-12-03 18:45
2005.12.25
Интернет


11-1115098181
Боб
2005-05-03 09:29
2005.12.25
Ошибки при компиляции KOLMCK v2.08


4-1129974960
Jupiter74
2005-10-22 13:56
2005.12.25
Службы Windows