【发布时间】:2011-05-16 16:48:44
【问题描述】:
下午好,我们正在使用 Windows 和 Linux 的内存映射文件 API 构建 Windows/LINUX 重复数据删除器的原型。我们的重复数据删除器首先对所有要重复数据删除的数据库记录进行顺序扫描。因此,在对要删除的数据库记录进行初始顺序扫描期间,我们将标志 FILE_FLAG_SEQUENTIAL_SCAN 传递给 Windows API CreateFile。 完成重复数据删除过程的第一部分后,我们尝试使用 Windows 内存映射 API 随机访问数据。此时,使用Windows C++ API,是否可以动态更改为FILE_FLAG_RANDOM_ACCESS模式?
In Linux, we are are able to do this with the following excerpt of code,
MapPtr = (char*)mmap((void *)BaseMapPtr ,mappedlength,PROT_READ,
MAP_PRIVATE, hFile,baseoff );
if (MapPtr == MAP_FAILED){
perror("mmap");
throw cException(ERR_MEMORYMAPPING,TempFileName);
}
madvise(MapPtr,mappedlength,MADV_RANDOM);
我们是否在重复数据删除过程的随机访问阶段使用 FILE_FLAG_SEQUENTIAL_SCAN 在 Windows 中付出了代价。谢谢。
【问题讨论】: