在两台WIN98下,为什么以下代码用Turboc2.0和VC++6.0编译后,程序执行的速度不同(用VC++编的要比用C编的慢十几倍,同时用C编写的程序在第一次的运行时间要比以后运行时间慢),能否将VC++下程序的执行速度提高到C下的执行速度?
#include "io.h"
#include "fcntl.h" int a=0,b;
 int handle;
 char workbufs[4096];
 DWORD dr;
 
 handle = open("H:\\20020101\\01izm146.ndx",O_RDONLY|O_BINARY);
/*注:H:\\20020101\\01izm146.ndx为另一台WIN98上的一个文件*/
 for(a;a<30000;a++)
 { 
  b=read(handle,workbufs,4096);  
 };
/*以上程序用于读取远程文件.*/
/*注:WIN98访问WIN98有这个问题,WIN98访问WIN2000不存在这个问题,如果是访问本地文件也不存在这个问题(包括WIN98访问WIN98和WIN98访问WIN2000)*/

解决方案 »

  1.   

    就这还是专家级的问题纳?
    VC要连接很多的MFC库,而C很单纯,不连接你没有Include的库,当然VC要比C慢了
    第一次比第二次慢是因为你第一次从硬盘上调用的东西操作系统已经放到内存里了,你下次是直接从内存里面调用的,当然要快了。
      

  2.   

    快慢仅仅是你感觉,理论讲读取速度是一样快的(TC20就慢一点)因为:TC20的函数(如上面的read)也要经过操作系统处理(采用int 21功能---由操作系统解释此功能),VC也是通过一样,即操作系统读盘时间相同(时间较长,一操作系统会采用缓存--位置缓存和数据缓存,即以后再次读取数据加快),但VC是32位,TC20是16位,在从操作系统到程序是VC快(但这段时间很短,可忽略)为什么VC会慢?因为VC编译的程序启动代码比TC20多(时间较长)这也就是你所运行结果所导致的原因你的运行结果将VC的速度加快方式:重新定义程序入口(VC中默认是按自已运行库运行的)
      

  3.   

    速度差别有这么大,只可能是慢在IO上。
    我认为可能是这样:两种方式最终都要调用到CreateFile和ReadFile这两个函数,但有可能两种方式调用着两个函数时的参数有所不同而导致速度有所不同。
    你把workbufs加大10倍,在比较一下速度,看看是否不同。