Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.01 c
15-1139317557
Progger
2006-02-07 16:05
2006.03.05
чем Delphi 5 хуже более поздних версий? Или лучше?


2-1139896114
Emik
2006-02-14 08:48
2006.03.05
Таблици InterBase


15-1139571443
Cerberus
2006-02-10 14:37
2006.03.05
DVD в .Avi


3-1136463543
Нютик
2006-01-05 15:19
2006.03.05
Дроби в Аксесе!!!!


2-1140420194
dabreezy
2006-02-20 10:23
2006.03.05
Преобразование в HEX





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский