窗口 – 什么可以导致程序第二次运行更快?
我在写测试代码时注意到的一点是,长时间运行的操作在第一次运行程序时比在后续运行时运行时间长,有时是10倍或更多。显然,这里有一些冷缓存/热缓存问题,但我似乎无法弄清楚它是什么。
它不是CPU缓存,因为这些长时间运行的操作往往是循环,我喂大量的数据,他们应该在第一次迭代后完全加载。 (加上,卸载和重新加载程序应该清除缓存。) 此外,它不是磁盘缓存。我已经通过加载所有的数据从盘前面和处理它以后,它是实际的CPU绑定数据处理缓慢地排除。 所以什么可以导致我的程序运行缓慢,我第一次运行它,但是如果我关闭它并再次运行它,它运行快得多?我在几个不同的程序中看到了这个,做了很不同的事情,所以它似乎是一个一般的问题。 编辑:为澄清,我在Delphi写,虽然我真的不认为这是一个Delphi的具体问题。但这意味着,无论什么问题,它不与JIT问题,垃圾收集问题或托管代码带来的任何其他行李有关。我不处理网络连接。这是纯CPU限制处理。 一个例子:脚本编译器。它运行像这样: >将整个文件从光盘加载到内存中 如果我把一个庞大的脚本文件(?100k行),从光盘加载到内存中,lex步骤需要大约15秒的第一次我运行,2秒的后续运行。 (是的,我知道这还有很长一段时间,我正在努力…)我想知道这个减速来自哪里,我可以做什么。 解决方法
三件事要试:
>在采样分析器中运行它,包括“冷”运行(重新启动后的第一件事)。通常应该足够了。>检查内存使用情况,它是否增长如此之高(即使是瞬态)操作系统将不得不交换内存,为您的应用程序腾出空间?这本身就可以解释你所看到的。还要看看,当你启动你的应用程序,你有免费的内存量。>启用系统性能工具并检查I / O计数器或文件访问,并确保在FileMon / Process Explorer下没有您忘记的某些文件或网络访问(剩余日志/测试代码) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |