windows 映射测试

	// 偏移量必须是分配粒度的倍数, 一般是 64k
	SYSTEM_INFO lSystemInfo;
	GetSystemInfo(&lSystemInfo);
	//DWORD dwPageSize = lSystemInfo.dwPageSize;
	DWORD   dwPageSize = lSystemInfo.dwAllocationGranularity;

	int ii = 0;
	// 每段数据的开始位置,第一段是0,不记录
	DWORD *dwFileOffset = new DWORDp[iAllNum];
	for (ii = 0; ii < iAllNum; ++ii)
	{
		dwFileOffset[ii] = ((qwFileSize / iAllNum*  (ii + 1)) + dwPageSize) / dwPageSize *dwPageSize;
	}
	dwFileOffset[iAllNum - 1] = qwFileSize;
// 测试映射本身消耗的时间
void CtestFuncDlg::OnBnClickedButton11()
{
	CFileDialog flg(true);
	if (flg.DoModal() == IDOK)
	{
		CTime cts = CTime::GetCurrentTime();

		CString csPath = flg.GetPathName();

		CString csMsg;
		// 2、创建文件对象
		HANDLE hFile = CreateFile(csPath, GENERIC_READ,
			0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
		if (hFile == INVALID_HANDLE_VALUE)
		{
			csMsg.Format("创建文件对象失败,错误代码: 0x%x", GetLastError());
			AfxMessageBox(csMsg);
			return ;
		}
		// 3、得到文件尺寸
		DWORD dwFileSizeHigh;
		__int64 qwFileSize = GetFileSize(hFile, &dwFileSizeHigh);
		qwFileSize |= (((__int64)dwFileSizeHigh) << 32);
		if (INFINITE == qwFileSize || 0 == qwFileSize)
		{
			CloseHandle(hFile);
			csMsg.Format("创建文件映射对象失败,错误代码:0x%x", GetLastError());
			AfxMessageBox(csMsg);
			return ;
		}

		//4、 创建整个文件映射对象
		HANDLE hSrcFileMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
		for (int ii = 0; ii < 1; ++ii)
		{
			LPBYTE lpbSrcMapAddress = (LPBYTE)MapViewOfFile(hSrcFileMap, FILE_MAP_READ, 0, 0, qwFileSize);
			UnmapViewOfFile(lpbSrcMapAddress);
			lpbSrcMapAddress = NULL;
		}

		CloseHandle(hSrcFileMap);
		hSrcFileMap = NULL;

		CTimeSpan span = CTime::GetCurrentTime() - cts;
		csMsg = _T("完成数据分割,消耗时间");
		csMsg += span.Format(_T("%H:%M:%S"));
		MessageBox(csMsg);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值