Главная страница
    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
1-1138811245
Korefey
2006-02-01 19:27
2006.03.05
библиотека EhLib


2-1140186431
korban
2006-02-17 17:27
2006.03.05
Сгенерировать произвольный символ


15-1139513697
-САша-
2006-02-09 22:34
2006.03.05
BDS2006


1-1138943311
x111
2006-02-03 08:08
2006.03.05
Закрытие Frame-а


3-1135067935
sanich
2005-12-20 11:38
2006.03.05
Не сохранются данные при работе с TIBTable





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский