机械硬盘 / USB2.0
读取一个 800M 的文件,第一次大约需要 25s 左右才能读完,第二次再读几乎瞬间就能读完了,而且换不同的软件来读都能享受到这种“便利”。任务管理器显示内存并没有显示被占用。
请问这种是什么缓存机制?有什么办法能知道这个缓存具体多大吗?是否可以人为的清楚这种缓存?
1
htfy96 2016-09-30 18:42:09 +08:00 via Android
linux 下可以看到 cache 内存, Windows 我猜应该是实际利用了但是不会计算在内。
楼主为什么要清除这个缓存? |
2
soratadori OP @htfy96 因为整个过程在一定几率下会出现一些计算错误,因为有这个缓存的机制存在,事后非常难发现是否出现错误。基本得等这个缓存被覆盖掉才能发现是否出错了
|
3
soratadori OP 复现这个“出错”很难,就算复现了也并不好解决,所以希望先找出是否有错误,有错误重新计算一遍就好。
|
4
htfy96 2016-09-30 19:10:40 +08:00 via Android
|
5
soratadori OP @htfy96 thanks 好像挺有用的,待我研究下。
|
6
soratadori OP @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. 似乎我要读取的话,就必须传入一个这样结构的数据进去,这玩意到怎么弄出来。 |
7
htfy96 2016-10-01 00:59:48 +08:00 via Android
@soratadori 这个我记得是异步读写的时候才要传…同步的时候不用传(?)…你可以查查 CreateFile 文档
|
8
soratadori OP @htfy96
成功了,原来是我眼神太差+英语不够灵光走到歪路上了。 |
9
Osk 2016-10-01 10:24:14 +08:00
system internal suits 里的 RAMMap 和 Cacheset 不知道是不是你需要的
|
10
soratadori OP @Osk
感谢, RAMMap 很有用 |
11
LGA1150 2016-10-02 04:48:27 +08:00 via Android
如果是 Win7 系统,打开“资源监视器”,你就能看到有一项“已缓存”的占用
Win8/10 在任务管理器中就能看到这个“已缓存” |