特定程序运行缓慢

出于多种原因的任一原因,程序可能开始运行减慢。

尽管这种情况看来微不足道,但还是有问题要回答:

  • 程序一直运行缓慢吗?

    如果程序刚开始运行变慢,原因可能是近期对程序作了改动。

  • 源代码是否改过,或者是否安装过新版本?

    如果是,与程序员或供应商协商解决。

  • 改过某些环境属性吗?

    如果程序(包括自身的可执行程序)使用的文件已经移动了,那么现在可能会产生先前并不存在的网络延迟。 或者,文件可能会争用先前位于不同磁盘上的单个磁盘存取器。

    如果系统管理员更改了系统调整参数,那么程序可能受到先前并不存在的约束。 例如,如果系统管理员更改了计算优先级的方法,那么惯于在后台快速运行的程序现在可能会慢下来,而前台程序则运行加快。

  • 程序是用 perlawkcsh 或者某些其他解释语言编写的吗?

    不幸的是,解释语言并未由编译器优化。 同样,在诸如 perlawk 的语言中很容易用一些字符来请求一个计算或 I/O 非常密集的操作。 通常有必要进行此类程序的台面检验或非正式同等检验,着重注意每一步操作隐含的迭代次数。

  • 程序是否始终以同样的速度运行,还是有时候运行变快?

    文件系统使用部分系统内存来保存供以后引用的文件页面。 如果一个有磁盘限制的程序紧接着运行两次,第二次通常会比第一次运行速度快。 类似的行为可通过使用 NFS 的程序看到。 这种情况也发生在大程序中,如编译器。 程序的算法可能不是有磁盘限制的,但是装入可执行的大程序所需时间也许会使第一次执行程序比随后执行长得多。

  • 如果程序一直运行缓慢,或者在其环境没有任何明显变化的情况下减慢,那么请查看它的资源相关性。

    性能限制资源标识 描述了用于查找瓶颈的方法。