...
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++;
}
...
Проблема чтения больших текстовых файлов данных
Открываю файл данных, затем прочитывается весь файл (getline()) и подсчитывается количество записей (не строк, одна запись занимает несколько строк) для ProgressBar, для статистики и т.п. Начало записи имеет характерную последовательность символов. При объёме до где-то 25-30 Мегов всё идет нормально,
а при бОльшем объёме программа погружается в нирвану, загрузка процессора при этом 99 %. Если читать такой файл в режиме пошаговой отладки - всё идёт нормально...
Вот фрагмент где всё происходит:
Код:
В char A[4] содержится сигнатура начала записи, пробовал вместо применить std::string - безрезультатно.
Подскажите пожалуйста что делать?
Попробуй функции win32 API.
Цитата:
Originally posted by fellow
Попробуй потоки.
Попробуй функции win32 API.
Попробуй потоки.
Попробуй функции win32 API.
А может просто сделать свою буфферизацию. Читай хоть по байту. Обрабатывай как надо. Сдесь вся проблема в виртальной памяти. Если засасывать 50 -60 мег целиком, то задействуется файл подкачки. Вот тут и начинаются песни славян. То выгрузи, это подгрузи, сдесь прервись, там возобнови. Поэтому загрузка проца 99%, а толку нет. И ни потоки, ни API не спасают. Только буфферизация.