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

Ваш аккаунт

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

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

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

Проблема чтения больших текстовых файлов данных

4.5K
11 декабря 2004 года
NightSleeper
43 / / 09.10.2004
Моя программа читает текстовые файлы данных (объёмы файлов 15-70 Мег, по 12-60 тысяч записей) и закачивать их на SQL-сервер. Всё идёт нормально кроме чтения этих самых файлов.
Открываю файл данных, затем прочитывается весь файл (getline()) и подсчитывается количество записей (не строк, одна запись занимает несколько строк) для ProgressBar, для статистики и т.п. Начало записи имеет характерную последовательность символов. При объёме до где-то 25-30 Мегов всё идет нормально,
а при бОльшем объёме программа погружается в нирвану, загрузка процессора при этом 99 %. Если читать такой файл в режиме пошаговой отладки - всё идёт нормально...
Вот фрагмент где всё происходит:

Код:
...
    char s[6144];

    std::ifstream idxStr;
    idxStr.open( (*pDataFlName).c_str());
        pDataFlName++;

        st = idxStr.rdstate();
        if (st & ios::failbit)
        idxStr.clear();

    while (!idxStr.eof())
    {
    idxStr.getline(s, sizeof(s));
        if (A[0] == s[0])
           if (A[1] == s[1])
        if (A[2] == s[2])
                   RecordCount++;
    }
    ...


В char A[4] содержится сигнатура начала записи, пробовал вместо применить std::string - безрезультатно.
Подскажите пожалуйста что делать?
310
12 декабря 2004 года
fellow
853 / / 17.03.2003
Попробуй потоки.
Попробуй функции win32 API.
259
14 декабря 2004 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by fellow
Попробуй потоки.
Попробуй функции win32 API.



А может просто сделать свою буфферизацию. Читай хоть по байту. Обрабатывай как надо. Сдесь вся проблема в виртальной памяти. Если засасывать 50 -60 мег целиком, то задействуется файл подкачки. Вот тут и начинаются песни славян. То выгрузи, это подгрузи, сдесь прервись, там возобнови. Поэтому загрузка проца 99%, а толку нет. И ни потоки, ни API не спасают. Только буфферизация.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог