Доступ к сотням файлов как можно быстрее

Итак, у меня есть программа, которая будет принимать до 1000 путей к файлам, и идея состоит в том, чтобы прочитать 3 конкретных байта, чтобы вернуть дату, что все в порядке.

Проблема начинается, когда она начинается, и использование памяти возрастает до максимума и через несколько секунд из-за этого зависает мой компьютер.

Я предполагаю, что процесс открытия занимает несколько мег или около того … Есть идеи о том, как добиться того, что мне нужно, без такого массового использования памяти?

ПРИМЕЧАНИЕ: файлы, которые я открываю как что-то вроде 15 ГБ

int main(int argc, char *argv[])
{
string paths[1000] = {};
int date[3] = {0};

cout << "Arg count: " << argc << endl;
if (argc <= 1)
paths[0] = "PRIV.EDB";
else
for(int i = 1;i<argc;i++){
paths[i-1] = argv[i];
}

cout << "Start\n\n";
for (int i=0;i<1000;i++)
{
if (paths[i].empty())
break;
cout << paths[i] << endl;
ifstream pFile;
pFile.open(paths[i], ios::binary);
pFile.seekg(195);
date[0] = pFile.get();
date[1] = pFile.get();
date[2] = pFile.get();
cout << date[0] << " : " << date[1] << " : " << date[2] << " \n";
cout << endl;
pFile.clear();
pFile.close();
}
cout << "Fin\n";

if (argc <= 1)
getchar();

return date[0];
}

1

Решение

Используйте отображенные в памяти файлы для лучшей производительности.

http://msdn.microsoft.com/en-us/library/dd997372.aspx

MSDN:

Эти отображенные в память файлы подходят для работы с чрезвычайно
большие исходные файлы

Википедия:

Основным преимуществом отображения памяти на файл является увеличение ввода-вывода
производительность, особенно при использовании больших файлов … Доступ к памяти
сопоставленные файлы быстрее, чем использование прямых операций чтения и записи для
две причины. Во-первых, системный вызов на несколько порядков медленнее, чем
простое изменение локальной памяти программы. Во-вторых, в большинстве
операционные системы области памяти сопоставлены на самом деле ядро
кэш страницы (файловый кеш), что означает, что не нужно создавать копии в
пространство пользователя.

Для легкой реализации смотрите:
http://www.boost.org/doc/libs/1_54_0/doc/html/interprocess.html

использовать:

повышение / межпроцессного / file_mapping

повышение / межпроцессного / mapped_region

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector