windows核心编程第17章 一个文件两个缓存

因为我只是简单对比了windows核心编程上面四种读写方式的快慢,所以,对于重叠部分的考虑,只是简单的对半划分,没有深加工

// ReadFileByTwoBuffer.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<Windows.h>


int main()
{
DWORD ReturnLength;
BOOL IsOK = FALSE;
char* v1=0;
DWORD v2;
DWORD Start, End;
Start = GetTickCount();

HANDLE FileHandle = CreateFile(L"E:/862.exe", GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (FileHandle == INVALID_HANDLE_VALUE)
{
printf("创建文件对象失败:%d ", GetLastError());
return 0;
}

char*VirtualAlloc_1 = (char*)VirtualAlloc(NULL, 1024 * 1024 * 545, MEM_COMMIT, PAGE_READWRITE);
IsOK = ReadFile(FileHandle, VirtualAlloc_1, 1024 * 1024 * 545, &ReturnLength, NULL);
if (IsOK == TRUE)
{

//v1 = strstr(VirtualAlloc_1, VirtualAlloc_1);
printf("%d\r\n", ReturnLength);
//printf("%s\r\n", v1);
}

v2 = SetFilePointer(FileHandle, -1024*1024*500, 0, FILE_END);//有符号值的低位32位,指定要移动文件指针的字节数。
// lDistanceToMove的正值在文件中向前移动文件指针,负值将文件指针移回。
char*VirtualAlloc_2 = (char*)VirtualAlloc(NULL, 1024*1024*545, MEM_COMMIT, PAGE_READWRITE);

IsOK = ReadFile(FileHandle, VirtualAlloc_2, 1024 * 1024 * 545, &ReturnLength, NULL);
if (IsOK == TRUE)
{
//v1 = strstr(VirtualAlloc_2, VirtualAlloc_2);
printf("%d\r\n", ReturnLength);
//printf("%s", v1);
}

End = GetTickCount();
printf("time=%d\n", End - Start);

getchar();
return 0;
}

 

posted @ 2018-01-31 01:44  _Flame  阅读(144)  评论(0编辑  收藏  举报