Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парсер медленно работает, Парсер медленно работает 
:(
    Опции темы
Rod
Дата 19.10.2006, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 19.10.2006

Репутация: нет
Всего: нет



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

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

Можно ли подгрузить кусок файла в память, а потом с ним работать?
Если да - то как?

PM MAIL   Вверх
MAKCim
Дата 19.10.2006, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата

Можно ли подгрузить кусок файла в память, а потом с ним работать?
Если да - то как?

mmap/munmap тебе поможет
man 2 mmap

читай напрямую без библиотечных функций
через read и большими блоками
Цитата

fgetc

ужас

Это сообщение отредактировал(а) MAKCim - 19.10.2006, 21:20


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
bsa
Дата 20.10.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



Rod
Для начала попробуй использовать fgets (fscanf). Думаю это значительно ускорит выполнение программы. Если же этого будет недостаточно, то остаются варианты работы через буфер или mmap, как советует MAKCim, но в этом случае реализция сложней.

PM   Вверх
bilbobagginz
Дата 21.10.2006, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 4
Всего: 317



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

Сколько у вас, дорогой человек, памяти для этих игр с парсингом ?
как много памяти ипользует ваш код ?

насколько вы знакомы с параллелизацией кода, с параллельным и распределённым программированием ?




--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
sergejzr
Дата 21.10.2006, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Вот примерчик для прохождение по файлу буффером
Код

#include <stdio.h>
#include <io.h>
/*by http://vingrad.ru/@sergejzr*/
int main(int argc, char *argv[])
{
FILE * in;
int  n,f;
char buf [512];//Buffer. размер- по вкусу и в зависимости от RAM'a

in=fopen(argv[1],"rb");
f=fileno(in);

while ((n = read(f, buf, sizeof(buf))) > 0)
 {
      parse(buf); //Ну а тут уже кусок обрабатываешь
 }

 return 0;
}



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0782 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.