|
|
|
Парсер медленно работает
|
|||
|---|---|---|---|
|
#18+
Есть файл - около 2 GB Его обрабатывает парсер. На обработку каждой строки уходит до 40ms(параметров в строке довольно много) Как ускорить работу парсера хотя бы раза в 3? Сейчас Используются следующие Функции : fseek fgetc strstr и др Можно ли подгрузить кусок файла в память, а потом с ним работать? Если да - то как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2006, 20:16 |
|
||
|
Парсер медленно работает
|
|||
|---|---|---|---|
|
#18+
Родион ЮЕсть файл - около 2 GB Его обрабатывает парсер. На обработку каждой строки уходит до 40ms(параметров в строке довольно много) Как ускорить работу парсера хотя бы раза в 3? Тяжело сказать. Слишком мало информации для размышлений. Родион Ю Сейчас Используются следующие Функции : fseek fgetc strstr и др Можно ли подгрузить кусок файла в память, а потом с ним работать? Если да - то как? Приблизительно так: Выделить в куче большой буффер, а лучше 2 . Открыть файл с параметром O_DIRECT, чтобы буферизация ФС не мешала. использовать seek & read. Одной нитю читать файл в первый буффер, другой парсить из второго. И так далее по кругу. Смотреть какая нить работает медленнее и ее оптимизировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2006, 20:42 |
|
||
|
Парсер медленно работает
|
|||
|---|---|---|---|
|
#18+
Родион ЮЕсть файл - около 2 GB Его обрабатывает парсер. На обработку каждой строки уходит до 40ms(параметров в строке довольно много) Как ускорить работу парсера хотя бы раза в 3? Сейчас Используются следующие Функции : fseek fgetc strstr и др Можно ли подгрузить кусок файла в память, а потом с ним работать? Если да - то как? как 40 мс намерил, надеюсь общее время работы разделить на кол-во строк? длина строки какая? лучше пример. чё там парсить. вообще, за 40 мс, можно слона обмерить:) если считывание идет по символьно, то нужно как минимум по строчно, а вообще в данном случае вообще нужно кусками хватать. совершенно недавно тут кто-то выкладывал класс для парсинга текстовых файлов, поищи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2006, 20:43 |
|
||
|
Парсер медленно работает
|
|||
|---|---|---|---|
|
#18+
Родион Ю На обработку каждой строки уходит до 40ms(параметров в строке довольно много) Как ускорить работу парсера хотя бы раза в 3? Попробуйте прогнать профайлер и понять на какой процедуре (или функции) парсер долго думает. P.S. А вообще-то лучше-б увидеть сорс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2006, 22:40 |
|
||
|
Парсер медленно работает
|
|||
|---|---|---|---|
|
#18+
Родион ЮМожно ли подгрузить кусок файла в память, а потом с ним работать? Если да - то как? Не можно, а нужно. Про это уже написали, но вот, пример из жизни: Писал тестовую программу, которая считывает 2 файла и пишет в другой попеременно по байту из каждого. Т.к. программа тестовая, даже не стал заморачиваться и считывал по одному байту, и их, по одному записывал. :) С файлами примерно по 300 КБ, на это уходило секунд 7. Как оказалось, это программа не на 2-3 запуска, а пока будет использоваться, то сделал считывание по 1КБ и запись 2-х. На глазок даже не удавалось определить, какое время стало требоваться на выполение операции. У вас, конечно, такого ускорения не будет, но об считывании блоками, стоит задуматься. Поддерживаю предложение от onstat-. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2006, 10:03 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=328&tid=2030235]: |
0ms |
get settings: |
7ms |
get forum list: |
24ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
294ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 612ms |

| 0 / 0 |
