可能由于是从缓冲区读取U盘文件而不是从U盘里面读文件,导致读取时间异常快,速度也很大,怎么样可以不经过缓存读取而是直接读取文件,用的是C++的open函数,open函数里面加了FILE_FLAG_NO_BUFFERING,但是无效,请问:
1.怎么测试能看出到底有没有通过缓存读取数据
2.怎么能不通过缓存读取数据

解决方案 »

  1.   

    C++有什么open函数么?倒是有个fopen/fopen_s,但是显然C++库函数是不会采用Windows API的标志位的,所以不明白你说的“C++的open函数,open函数里面加了FILE_FLAG_NO_BUFFERING”到底是怎么回事。如果用Windows API,那么就该用CreateFile,可以指定FILE_FLAG_NO_BUFFERING标志取消操作系统的文件缓存,但是这时候要小心,程序中的读写缓冲区地址和大小都应该和操作媒体(磁盘)的扇区对齐。另外,媒体(磁盘)自身的缓存功能无法取消,不过你是U盘,可能不带自己的缓存。
      

  2.   

    CFile::Write函数前获取开始时间,写完获取结束时间,写的长度知道,除一下就出来速度了
      

  3.   


    你不是要测试读取的速度么?怎么用CFile::Write?
    把计时处理放到CFile::Open那里,用文件长度除以时间差来计算速度
      

  4.   

    磁盘的缓存需要通过DeviceIoControl函数使用IOCTL_DISK_SET_CACHE_INFORMATION控制码直接去控制硬件。