Я пытаюсь читать из файла с отображением памяти, но доступ к файлу занимает много времени. Я сопоставляю весь файл со своей программой, и первоначальный доступ к быстрому, но затем он начинает резко тормозить
Файл ~ 47 ГБ, а у меня 16 ГБ ОЗУ. Я запускаю 64-битное приложение в Windows 7, используя Visual Studios в качестве своей IDE. Ниже приведен фрагмент моего кода
hFile = CreateFile( "Valid Path to file", // name of the write
GENERIC_READ , // open for reading
0, // do not share
NULL, // default security
OPEN_EXISTING, // existing file only
FILE_ATTRIBUTE_NORMAL, // normal file
NULL); // no attr. template
if (hFile == INVALID_HANDLE_VALUE)
{
cout << "Unable to open vals" << endl;
exit(1);
}
hMapFile = CreateFileMapping(
hFile,
NULL, // default security
PAGE_READONLY, // read/write access
0, // maximum object size (high-order DWORD)
0, // maximum object size (low-order DWORD)
NULL); // name of mapping object
if (hMapFile == NULL)
{
cout<< "Error code " << GetLastError() << endl;
exit(1);
}
data = (float*) MapViewOfFile(
hMapFile,
FILE_MAP_READ,
0,
0,
0);
if (data == NULL)
{
cout << "Error code " << GetLastError() << endl;
CloseHandle(hFile);
exit(1);
}
Это только потому, что файл настолько велик, что постоянная замена фрагментов файла занимает много времени, или это какой-то другой параметр, который мне нужен для более быстрого доступа?
РЕДАКТИРОВАТЬ: я пытался использовать только чтение вместо чтения, записи, выполнения, как показано выше, но скорость по-прежнему низкая. Я понимаю концепции отображения памяти и переключения пространства подкачки, но я подумал, что, возможно, я делаю что-то еще не так, что мешает скорости
PAGE_EXECUTE_READWRITE
илиGENERIC_EXECUTE
для файла данных. - person Ben Voigt   schedule 14.07.2015