一个函数,前后计算时间在约5~6分钟.
函数是对一个全局变量(这是一个自定义类)的多个成员变量(可能有些人叫实例变量)进行操作/*读取/交换/写入*/.
函数中调用多个其它的函数(都是几十亿次的调用,所以哪怕是一点点的优化,可能都可以节省几十秒).问题在于,现在这个总的运行时间我测不准.直接在函数进去的时候,::GetTickCount(),出来的时候再取一次,这个方法对我来说不可用.因为,系统中可能有其它进程占着CPU,导致我的EXE不是100%的用着CPU;或函数等待其它进程(可能有一些I/O操作),等的时间我不能控制。-----------------------------------------------所以我用WINDOWS任务管理器中,看我EXE的"CPU时间",(相同输入,相同输出的情况下)多次运行,从05:08到05:47 不等.所以我无从知道函数是改了快,还是不改快,也不知道怎么改才快.-----------------------------------------------是不是"任务管理器中"中的"CPU时间"不准,还是我程序有BUG?

解决方案 »

  1.   

    查一下如何程序如何分配CPU,以前这个论坛说过用什么函数给程序分配CPU,让这个程序单独占一个CPU或几个CPU,然后再建立一个线程,在线程里执行这个函数,让线程的优先级高些,同时用多媒体时间来计时
      

  2.   

    dwOldTime = GetTickCount();
    DoSomething();
    dwTimeElapsed = GetTickCount() – dwOldTime;
      

  3.   

    我最终的方法是,以最高优先度开始这个线程,基本上这个线程一直占着单独的一个核.我发现,WINDOWS任务管理器中,我EXE的"CPU时间",可能计算得不准.完全相同的计算步骤(输入输出完全一致,算法完全一致的情况下,排除了I/O操作/*全部事先做*/),前后GetTickCount得出的时间,相差在1秒以内,但任务管理器中显示的"CPU时间"相差10几或最多20几秒.//总时间300多秒所以我无法使用任务管理器中的"CPU时间".--------------------------------------我的问题在于多个函数比较难进行单独的优化,因为局部几个函数快了(比如总的时间由20秒降为几秒),可能全局上看反而慢了。有点像数据库结构,要是做了索引,读取(SELECT)的人快了,写入(insert/update)的人慢了.所以我测试的时间,必须以总的时间为准.当然也是一个个函数进行优化,全不单独看这个函数的时间.