内存映射文件的使用

来源:百度知道 编辑:UC知道 时间:2024/05/25 05:31:40
如何在使用内存映射文件来读写大文件时,只分配少量内存空间(如10MB)作为读写之用,然后将要读写的文件每次映射指定数据量(如10MB)到该内存空间中,而还要为该内存映射文件分配与要读写的文件大小相同的内存空间。
即在调用CreateFileMapping函数时是否可以指定比要读写的文件小的内存空间。
因为我在前一阵子使用内存映射文件来读写文件(有两个内存映射文件)时发现我写的程序对于较小的文件的读写还是很快的,但是对大于500MB(实际内存大小为1GB)的文件的读写就会在后面的一半变得很慢。
各位大吓最好能够给出一个示例。若回答得好还可再加分。
主要是用内存映射文件可以快速地读写文件,这才是使用内存映射文件的目的所在。

当然,我也知道CreateFileMapping()函数的DWORD dwMaximumSizeHigh与DWORD dwMaximumSizeLow均指定为0时可以使内存映射文件的大小与实际文件的大小相同,而且在只读取或写入文件(不设置两个内存映射文件,分别用于读写)时,其速度还是相当快的;但是若设置了两个内存映射文件,其读写速度就明显的变慢。我也是一直受这个疑问困扰着。若stone_dongdong 知道如何解决,请帮助一下。

为什么要内存映射?
ReadFile本来就不是一次把文件全部读到内存。

HANDLE hFile = CreateFile( ...);
HANDLE hMapOjb = CreateFileMapping( hFile, null, PAGE_READWRITE|SEC_RESERVE, 0, 0, null);

TCHAR* pBuf = (LPTSTR) MapViewOfFile( hMapObj, FILE_MAP_WRITE, 0, OFFSET, 10MB);

然后就对 pBuf进行操作。

注意控制参数的调整,