加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

窗口 – 什么可以导致程序第二次运行更快?

发布时间:2020-12-15 10:19:43 所属栏目:大数据 来源:网络整理
导读:我在写测试代码时注意到的一点是,长时间运行的操作在第一次运行程序时比在后续运行时运行时间长,有时是10倍或更多。显然,这里有一些冷缓存/热缓存问题,但我似乎无法弄清楚它是什么。 它不是CPU缓存,因为这些长时间运行的操作往往是循环,我喂大量的数据
我在写测试代码时注意到的一点是,长时间运行的操作在第一次运行程序时比在后续运行时运行时间长,有时是10倍或更多。显然,这里有一些冷缓存/热缓存问题,但我似乎无法弄清楚它是什么。

它不是CPU缓存,因为这些长时间运行的操作往往是循环,我喂大量的数据,他们应该在第一次迭代后完全加载。 (加上,卸载和重新加载程序应该清除缓存。)

此外,它不是磁盘缓存。我已经通过加载所有的数据从盘前面和处理它以后,它是实际的CPU绑定数据处理缓慢地排除。

所以什么可以导致我的程序运行缓慢,我第一次运行它,但是如果我关闭它并再次运行它,它运行快得多?我在几个不同的程序中看到了这个,做了很不同的事情,所以它似乎是一个一般的问题。

编辑:为澄清,我在Delphi写,虽然我真的不认为这是一个Delphi的具体问题。但这意味着,无论什么问题,它不与JIT问题,垃圾收集问题或托管代码带来的任何其他行李有关。我不处理网络连接。这是纯CPU限制处理。

一个例子:脚本编译器。它运行像这样:

>将整个文件从光盘加载到内存中
> Lex将整个文件放入一个令牌队列
>将队列解析成树
>在树上运行codegen以生成字节码

如果我把一个庞大的脚本文件(?100k行),从光盘加载到内存中,lex步骤需要大约15秒的第一次我运行,2秒的后续运行。 (是的,我知道这还有很长一段时间,我正在努力…)我想知道这个减速来自哪里,我可以做什么。

解决方法

三件事要试:

>在采样分析器中运行它,包括“冷”运行(重新启动后的第一件事)。通常应该足够了。>检查内存使用情况,它是否增长如此之高(即使是瞬态)操作系统将不得不交换内存,为您的应用程序腾出空间?这本身就可以解释你所看到的。还要看看,当你启动你的应用程序,你有免费的内存量。>启用系统性能工具并检查I / O计数器或文件访问,并确保在FileMon / Process Explorer下没有您忘记的某些文件或网络访问(剩余日志/测试代码)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读