请教一个硬盘读写的缓存机制

2016-09-30 18:40:15 +08:00
 soratadori

机械硬盘 / USB2.0

读取一个 800M 的文件,第一次大约需要 25s 左右才能读完,第二次再读几乎瞬间就能读完了,而且换不同的软件来读都能享受到这种“便利”。任务管理器显示内存并没有显示被占用。

请问这种是什么缓存机制?有什么办法能知道这个缓存具体多大吗?是否可以人为的清楚这种缓存?

2216 次点击
所在节点    程序员
11 条回复
htfy96
2016-09-30 18:42:09 +08:00
linux 下可以看到 cache 内存, Windows 我猜应该是实际利用了但是不会计算在内。
楼主为什么要清除这个缓存?
soratadori
2016-09-30 18:50:59 +08:00
@htfy96 因为整个过程在一定几率下会出现一些计算错误,因为有这个缓存的机制存在,事后非常难发现是否出现错误。基本得等这个缓存被覆盖掉才能发现是否出错了
soratadori
2016-09-30 18:53:47 +08:00
复现这个“出错”很难,就算复现了也并不好解决,所以希望先找出是否有错误,有错误重新计算一遍就好。
htfy96
2016-09-30 19:10:40 +08:00
soratadori
2016-09-30 19:23:54 +08:00
@htfy96 thanks 好像挺有用的,待我研究下。
soratadori
2016-10-01 00:10:42 +08:00
@htfy96

→_→ 请问下你知道啥是 OVERLAPPED 不,这玩意咋弄出来。 我不太会这些。

File access sizes, including the optional file offset in the OVERLAPPED structure, if specified, must be for a number of bytes that is an integer multiple of the volume sector size.

似乎我要读取的话,就必须传入一个这样结构的数据进去,这玩意到怎么弄出来。
htfy96
2016-10-01 00:59:48 +08:00
@soratadori 这个我记得是异步读写的时候才要传…同步的时候不用传(?)…你可以查查 CreateFile 文档
soratadori
2016-10-01 01:44:32 +08:00
@htfy96
成功了,原来是我眼神太差+英语不够灵光走到歪路上了。
Osk
2016-10-01 10:24:14 +08:00
system internal suits 里的 RAMMap 和 Cacheset 不知道是不是你需要的
soratadori
2016-10-01 11:43:36 +08:00
@Osk
感谢, RAMMap 很有用
LGA1150
2016-10-02 04:48:27 +08:00
如果是 Win7 系统,打开“资源监视器”,你就能看到有一项“已缓存”的占用
Win8/10 在任务管理器中就能看到这个“已缓存”

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/310047

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX