Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.05;
Скачать: 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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.027 c
2-1140080370
DrNemo
2006-02-16 11:59
2006.03.05
Закачка файла с интернета на ар1


15-1139682940
alexdid
2006-02-11 21:35
2006.03.05
VMWARE windows xp prof sp2


2-1140078068
VanDet
2006-02-16 11:21
2006.03.05
Здраствуйте помогите мне написать программу


3-1136875648
neat
2006-01-10 09:47
2006.03.05
Дата в DBGrid


1-1138962770
zema
2006-02-03 13:32
2006.03.05
как узнать высоту всплывающего меню?