Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Парсер медленно работает

21K
19 октября 2006 года
Rod123
2 / / 19.10.2006
Есть файл - около 2 GB
Его обрабатывает парсер.
На обработку каждой строки уходит до 40ms(параметров в строке довольно много)
Как ускорить работу парсера хотя бы раза в 3?

Сейчас Используются следующие Функции :
fseek
fgetc
strstr
и др

Можно ли подгрузить кусок файла в память, а потом с ним работать?
Если да - то как?
3
19 октября 2006 года
Green
4.8K / / 20.01.2000
м-да...
не с того конца заходишь.

Кешировать ввод, конечно нужно, но это отчасти делают за тебя.
А для того чтобы оптимизировать что-то, надо сначала напустить на это что-то профайлер и выяснить ресурсоемкие места твоей программы.
284
20 октября 2006 года
michael_is_98
587 / / 25.02.2005
Можно сказать сразу - при чтении избегать частого выделений/освобождений памяти, лучше действительно использовать буфер (4Кб вполне хватит). Тогда и функция чтения будет использоваться одна - read (). Из какой библиотеки (CRTL,STL,<io.h>) - не так важно (при соответствующей реализации все будет работать быстро). Единственно, что могу сказать по собственному опыту - в часты ввода/вывода STL в VC2003 работает значительно быстрее предыдущих версий (VC5.0).

Потом, что это за файл и что понимаешь под парсером?

Если парсер возвращает тип лексемы и саму лексему, здесь возможны различные варианты оптимизаций, достаточно прочесть какую-либо книгу по построению компиляторов.

А если речь идет о чтении заранее известного (фиксированного) набора данных, возможно и парсер не стоит делать, а просто качественно реализовать чтение.
398
20 октября 2006 года
Alexandoros
630 / / 21.10.2005
1)Сделай map файла в память(MapViewOfFile)
2)Оптимизируй парсер. ;)
284
20 октября 2006 года
michael_is_98
587 / / 25.02.2005
1) map не поможет, все равно буферизация с использованием простых функций будет проще и надежнее. При использовании map ты не узнаешь, вышел ли ты за границы файла или нет, а каждый раз проверять это - совсем не оптимально
2) сначала нужно определиться нужен ли парсер вообще. Классический парсер должен возвращать тип лексемы, а по запросу в зависимости от типа - значение лексемы
398
20 октября 2006 года
Alexandoros
630 / / 21.10.2005
1)Ну да, уметь ведь еще юзать надо.
284
20 октября 2006 года
michael_is_98
587 / / 25.02.2005
Это не сложно , могу даже исходники привести
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог