RPWT

  这两天都是在跟软件的运行效率较劲,看着每次扫描数据的处理时间一点点缩短,心里无疑是开心的。但是这里还是给自己遗留下了一个问题,如果不能用我所能够认识的理论来解释的话,我只能把它归结为人品问题了。
 
  问题描述
  在一次完整的处理流程当中,包括了大量的文件读写。但是这些文件的读写应该说是没有什么直接关系的。因为在此之前,所有的数据都已经准备好了。
  ……
  PrepareData(); // (1)
  ……
  WriteData1();  // (2)
  WriteData2();  // (3)
  ……
 
  经过优化,上面三个步骤的运行时间都已经降到了几十毫秒这一数量级。特别是第一步的准备数据,每次运行的时间基本上波动不超过10毫秒,非常稳定。但是后面两个写文件的操作却发生比较大的波动,在50毫秒到100毫秒之间。不过总共加起来还是远远小于我一开始设定的最大值。
  于是我把它们连在一起运行,奇怪的事情发生了。步骤1和步骤2的计时基本上没有什么变化,但是步骤3的运行时间一下子却变成了500多毫秒至1000毫秒,放大了近十倍。
  问题出在哪里?
  很明显,算法本身应该没有太大的潜力可以挖了,一千五百多个文件的写操作在50毫秒之内完成应该没有什么太大的问题。独立运行虽然有波动,但是绝对没有大到这个地步。文件冲突?不对啊,这根本就是不同路径下的文件,怎么会冲突呢。文件打开方式虽然有一个细微的差别,但是这个因素很快就被实际测试给否定了……
  问题的解决:诡异
  郁闷了将近一个下午,问题却意外的得到了解决,但是原因我还是不知道。解决的方式很诡异,那就是把2和3给调换一下秩序!因为我无意中发现注释掉2后,3的运行时间马上变得正常了而且很稳定。然后把2给移到3的后面呢?有趣了,这下居然没有无谓的占用太多的时间。
  天哪,难道真的是人品问题?需要补充说明的几点,2和3谁先运行谁后运行,在逻辑上一点差别都没有;另外一个有趣的现象是,把2移到3之后运行后,运行时间变成了稳定的100毫秒左右,但是此前经常能够达到最短的运行时间为50毫秒。
Advertisements
  1. #1 by chen_guobo on September 16, 2005 - 4:40 AM

    不要相信程序员!

  2. #2 by Lei on September 16, 2005 - 5:04 AM

    Why? Give me a reason!

  3. #3 by chen_guobo on September 17, 2005 - 6:57 AM

    换一下顺序,就好了。也没个道理~

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: