为什么第二次执行很快

swayi21 2008-09-08 04:06:09
我用流循环读取 512KB 比较两个文件,

当文件是 600MB 时,耗时大概 210 秒
如果不对其他大文件操作,或者不退出程序,或者不重启机器,
第二次执行时,只要4秒!

类似的还有 SQL 的执行,第一次慢,第二次快。

到底是什么原因呢?
...全文
209 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
swayi21 2008-09-11
  • 打赏
  • 举报
回复
估计是 API ReadFile 的优化吧。
swayi21 2008-09-09
  • 打赏
  • 举报
回复
这是我采集的单步执行时间,差别怎么就这么大呢?
1 2-4 5..

203 16 15
562 0 0
94 0 0
0 0 0
203 0 0
219 0 0
344 16 0
0 0 0
0 0 0
281 0 0
500 0 0
94 15 0
0 0 0
234 0 0
235 0 0
437 0 0
(...)

哪位详细点解释给本菜鸟听听啊!
XSign 2008-09-09
  • 打赏
  • 举报
回复

第一次比较的时候,系统会将文件度入到内存
第二次比较的时候,读入内存的内容还在,所以不用再次读入内存了

lz测试比较小(几kb?)的文件看看
2次的执行时间应该相差不多了吧?

以上是个人猜测,没有实际证实:)
h345026039 2008-09-09
  • 打赏
  • 举报
回复
菜鸟看天文
swayi21 2008-09-08
  • 打赏
  • 举报
回复
我曾关闭虚拟内存,
发现物理内存增量最大也就 2MB,
系统自己分配虚拟内存不过 20MB
swayi21 2008-09-08
  • 打赏
  • 举报
回复
to all

那它到底 cache 在哪?
我曾比较过更大的文件 2GB,这可是要耗费不少哦
Mnky 2008-09-08
  • 打赏
  • 举报
回复
系统知道你这两个文件都没动,他自己就偷懒了。
这算是一种优化方式,类似于cache
aiirii 2008-09-08
  • 打赏
  • 举报
回复
一般是被系统cache了
就你给这么少的条件判断的话
swayi21 2008-09-08
  • 打赏
  • 举报
回复
to 僵哥

省掉了些啥呢?
临时内存还是这么小啊,一样循环,
两个一样的文件,一定要到最后才知道结果的,为什么就那么快?
僵哥 2008-09-08
  • 打赏
  • 举报
回复
Buffering

6,850

社区成员

发帖
与我相关
我的任务
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
  • Windows Server社区
  • qishine
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧