我再做一个测试u盘读写速度的程式,我的大致思路是:
 int t1=GetTickCount();
HANDLE hwrite=CreateFile(......);//在u盘创建一个文件
char wbuf[1024*512];
for(int i=0;i<32;i++)
WriteFile();
t2=GetTickCount();
CloseHandle(hwrite)
int writeSpeed=1024*512*32/(t2-t1);
.
.
.
int t3=GetTickCount();
HANDLE hread=CreateFile(...);//打开该u盘的文件
char* rbuf=new char[1024*512*32];
ReadFile(hread,rbuf,1024*512*32,&dw,NULL);
delete []rbuf;
CloseHandle(hread);
t4=GetTickCount();
int readspeed=1024*512*32/(t4-t3);
可是这样问题出现了,我写的速度是正常的而读的速度不正常(很快很快),但是我如果读取大量的文件(比如是1024*1024*32*10),读取的速度就正常了,而那样时间太长了。
请高手指点是什么原因.
我也试过用CopyFile的方式,但是速度太不稳定,只有写文件的方式速度还比较稳定。
我看过vb的用binaryread()和readbytes().但是我不会用vb,不知道vc中能用什么函数相当于这两个函数。
请大虾指点用什么方式测试。

解决方案 »

  1.   

    我是楼主:
    我也知道是这个原因,
    所以我先读取较大(我用num兆表示吧)的文件但是不用delete []buf;
    然后在读取较小的数据,再先delete小的数据 然后再delete []buf;
    这样得到的结果也比较稳定,
    但是有两个问题,1,测试时间太长(因为要读取较大的文件);
                    2,电脑的配置不同的话num的值也不同,我也设置ini档。但不方便。
    所以这种方式不好。
    请高手指点指点!!!(我在线等哦!)
      

  2.   

    (试试写的时候用设备名来创建句柄,这样的话不会走系统缓存):
    怎么用设备名创建句柄啊!
    比如,是H:\\吗pfilename="H:\\1.txt";
    sprintf(filerd,"%s%test.file",pfilename);
    %test.file是什么意思知道吗?
      

  3.   

    不是h:,这是盘符,设备名需要扫描当前设备才能得到,类似\\\\.\\STORAGE#RemovableMedia#7&720ba0c&0&RM#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}这样的一个名字
      

  4.   

    读写好像有个DMA方式,不经过缓存,你可以找找相关的资料
      

  5.   

    我用设备名创建句柄
    就发生错误DMA是硬件是的说法吧
    它和软件有关系吗?
    我找找看看