内存映射文件很慢
Memory Mapped FIle is slow
我正在尝试读取内存映射文件,但访问该文件需要很长时间。我正在将整个文件映射到我的程序,并且初始访问速度很快,但随后它开始急剧变慢
文件约为 47gb,我有 16gb 的 RAM。我是 运行 windows 7 上的 64 位应用程序,使用 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);
}
这仅仅是因为文件太大以至于不断交换文件块需要很长时间,还是我需要一些其他参数来加快访问速度?
编辑: 我尝试使用只读而不是使用上面看到的读、写、执行,但速度仍然很慢。我了解内存映射和开关交换的概念 space,但我认为我可能做错了其他事情阻碍了速度
这是因为分页。发生的情况是您的 RAM 只能容纳 16GB 的文件(实际上由于您计算机上的其他程序 运行,它更少,但为了简单起见,我们只使用它)。
因此,如果您在程序中访问不在 RAM 中的文件部分(比方说,20GB 段中的文件部分),您的 RAM 需要与磁盘通信并传输整个文件文件的新段到 RAM。这需要很多时间。
我正在尝试读取内存映射文件,但访问该文件需要很长时间。我正在将整个文件映射到我的程序,并且初始访问速度很快,但随后它开始急剧变慢
文件约为 47gb,我有 16gb 的 RAM。我是 运行 windows 7 上的 64 位应用程序,使用 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);
}
这仅仅是因为文件太大以至于不断交换文件块需要很长时间,还是我需要一些其他参数来加快访问速度?
编辑: 我尝试使用只读而不是使用上面看到的读、写、执行,但速度仍然很慢。我了解内存映射和开关交换的概念 space,但我认为我可能做错了其他事情阻碍了速度
这是因为分页。发生的情况是您的 RAM 只能容纳 16GB 的文件(实际上由于您计算机上的其他程序 运行,它更少,但为了简单起见,我们只使用它)。
因此,如果您在程序中访问不在 RAM 中的文件部分(比方说,20GB 段中的文件部分),您的 RAM 需要与磁盘通信并传输整个文件文件的新段到 RAM。这需要很多时间。