Вниз
Скачать: CL | DM;

Как копировать данные с последующей обработкой?   Найти похожие ветки 

← →
tytus   (2006-01-30 15:34) [0]

Доброго дня ВСЕМ. Создаю MemoryMappedFile (исходный файл - бинарный), размер может быть от 20 до 120 метров. В программе ищу записи (например по номеру байта). Количество найденных записей может быть произвольное - от 0 до 2 млн. (запись состоит из байта заоголовка $84 и следующий байт - длинна записи - 45..75 байт). В процессе поиска записей мне нужно как-то скопировать найденные записи в память и затем обрабатывать уже скопированные записи. Если сразу обрабатывать все записи, то получается очень долго (до 5 мин.). А если произвести только поиск - то 120 метров за 4 секунды. Так вот если в  этих 120 метрах будет пусть 1000 записей - все-таки это будет быстрее. Подскажите пожалуйста, как сие дело оформить. Отображенный в память файл не подходит, так как зарание неизвестно количество записей и их суммарный размер.


← →
Digitman ©   (2006-01-30 15:41) [1]

Обрабатывай найденный записи "на месте".
Никто и ничто, судя по на сей момент изложенному тобой, не заставляет их (найденные записи) копировать куда-то для обработки.


← →
tytus   (2006-01-30 15:48) [2]

>[1]
Обработка записей включает в себя разбивку записи на пакеты, причем зарание неизвестно - какие пакеты попадутся, всего пакетов около 60. Каждый пакет состоит из своего ID, и данных. Для каждого пакета нужно сформировать строку информации, и рисовать инфу в Grid-e. Поиск пакетов производится оператором CASE - и 60 вариантов ID пакетов. Есть же разница - обрабатывать CASE 2 млн. раза или найти записи (пусть даже 1000), и обработать.


← →
Digitman ©   (2006-01-30 16:02) [3]


> tytus   (30.01.06 15:48) [2]


Мне это ни о чем не говорит.

Приводи код.

CASE же здесь абсолютно ни при чем.


← →
tytus   (2006-01-30 16:11) [4]

>Digitman[3]
Да с кодом напряжно - комп и инетом на другом этаже...
Нужен совет желательно с примером, что правильнее использовать - TMemoryStream или другой какой-нить класс, если в процессе поиска известен указатель на начало записи (в отображении файла) и ее размер. Вот нужно и скопировать (а затем и добавлять) запись с отображения КУДА-ТО...
Хотя если идей нет - могу и код принести. Только через время, а время-то идет...


← →
Digitman ©   (2006-01-30 16:14) [5]


> tytus   (30.01.06 16:11) [4]


Я сомневаюсь, что копирование чего-то куда-то нужно в принципе.


> нужно и скопировать (а затем и добавлять) запись с отображения
> КУДА-ТО


На то, например,  есть ф-ция CopyMemory()


← →
tytus   (2006-01-30 16:19) [6]

>[5]
ОК. Пойду подумаю, если что- ждите с кодом...BYE!


← →
Набережных С. ©   (2006-01-30 17:11) [7]


> tytus   (30.01.06 15:48) [2]


>  Поиск пакетов производится оператором CASE - и 60 вариантов
> ID пакетов. Есть же разница - обрабатывать CASE 2 млн. раза
> или найти записи (пусть даже 1000), и обработать.

Не совсем понятно. Ты же в первом посте сказал, что количество найденных может быть 2 миллиона. И для каждого, как я понимаю, придется делать case - вне зависимости, будешь ты копировать или нет.

Я бы посоветовал вынести собственно поиск и обработку в отдельный поток. Поток ведет поиск, нашел - обработал, результат добавил в свой внутренний список. Набралось, скажем 128 результатов - передал их пакетом главному потоку, а сам начал формировать новый пакет. А главный поток добавляет эти пакеты в общий список и выводит на экран по мере надобности.

А лишнее копирование только увеличивает общее время, причем значительно.



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.023 c
1-1138504415
Linn
2006-01-29 06:13
2006.03.05
Hotkeys


15-1139559511
Jappak
2006-02-10 11:18
2006.03.05
ДБгрид


2-1140372718
{XXX}
2006-02-19 21:11
2006.03.05
Сохраниение страниц в формате Html


2-1139583976
StalVega
2006-02-10 18:06
2006.03.05
Сложная штука SNMP на делфи


3-1136407474
bopmy
2006-01-04 23:44
2006.03.05
Создание в run-time компонентов заранее неизвестных типов




   Наверх