int hugefile_rw(CString strFilePath)
{
clock_t start, finish;
//------------------------------------------------------内存映射方法;
start = clock();
//创建或打开文件内核对象;
HANDLE fileH = CreateFile(strFilePath.GetBuffer(0),
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(fileH == INVALID_HANDLE_VALUE)
{
cout<<"error in CreateFile"<<endl;
return -1;
}
//创建一个文件映射内核对象;
HANDLE mapFileH = CreateFileMapping( fileH,
NULL,
PAGE_READWRITE,
0,
0,
TEXT("Resource"));
if(mapFileH == NULL)
{
cout<<"error in CreateFileMapping"<<endl;
return -1;
}
//将文件数据映射到进程的地址空间;
char * mapH = (char *)MapViewOfFile( mapFileH,
FILE_MAP_ALL_ACCESS,
0,
0,
0);
if(mapH == NULL)
{
cout<<"error in MapViewOfFile"<<endl;
return -1;
}
std::string buffer = mapH;
//读取数据;
char *buf = mapH;
double k;
int times = 300000*34;
//关闭句柄;
UnmapViewOfFile(mapH);
CloseHandle(mapFileH);
CloseHandle(fileH);
finish = clock();
//打印耗时;
double d1 = (double)(finish - start)/ CLOCKS_PER_SEC;
//------------------------------------------------------传统方法;
start = clock();
FILE *fp = fopen("D:\\code\\棋牌代码\\MDY棋牌项目\\运行\\debug\\unicode--2010\\res\\AllCityData.ini","r");
if(fp == NULL)
{
cout<<"error in fopen"<<endl;
return -1;
}
for(int i = 1 ;i <= times; i++)
{
fscanf(fp,"%lf",&k);
}
fclose(fp);
finish = clock();
double d2 = (double)(finish - start)/ CLOCKS_PER_SEC;
}
以上两种方式, 内存方式比传统方式速度快很多。
读取文件的两种类型
最新推荐文章于 2024-03-17 15:32:30 发布