如何增加Windows 7的磁盘缓存


18

在Windows 7(64位)下,我正在读取9000个中等大小的文件。总共有200 MB以上的数据。我正在使用Java(JDK 1.6.21)遍历文件。前1400个左右全速运行,但每个文件的速度降至4ms。事实证明,仅通过打开文件即可产生主要成本。

我正在使用打开文件new FileInputStream(当然要及时关闭它们以避免文件泄漏)。经过一番调查,我发现Windows的磁盘缓存仅使用100 MB左右的RAM,尽管我有8 GiB可用。我尝试使用CacheSet工具增加缓存大小,但是我提供的任何值都被认为超出范围

我也尝试过启用LargeSystemCache注册表项,但是(重新启动后)该CacheSet工具仍然指示我正在使用100 MB的缓存(并且在测试运行期间不会增加)。是否有人建议“鼓励” Windows 7缓存我的9000文件?


3
您从哪里得到的信息是仅100MB用于磁盘缓存?据我所知,Windows默认使用所有可用内存进行磁盘缓存。在我看来,只有100MB的值是最小值。
罗伯特

1
问题的一部分可能是Java及其JVM。有很多选项可以调整JVM-publib.boulder.ibm.com/infocenter/javasdk/v6r0/…。我认为最好的选择就是用C ++或FreeBASIC编写(两者都编译成本地代码,并且仅受操作系统允许的限制)。
Natalie Adams

Answers:


4

Superfetch不会缓存所有大文件,仅缓存被访问的部分。因此,访问该文件需要磁盘仍然读取。像我一样的210 mb磁盘缓存可以缓存Windows中所有这些小文件中的所有内容。而且性能很明显。我怀疑这是否会对更快的系统产生影响。


2
什么是超取,它与这个问题有什么关系?
jpaugh

4

我尝试使用CacheSet工具增加缓存大小,但我提供的任何值都被认为超出范围。

  1. 确保您明确地运行CacheSet“以管理员身份”。发生任何错误时,CacheSet会说这些值超出范围。
  2. 确保缓存大小可被4 KB整除

另外,我注意到CacheSet在使用大值时会遇到一些麻烦,可能是因为它是2006年以来的32位应用程序。我去写了一个围绕同一API的64位程序,该程序允许将缓存大小设置为4GB以上:http:/ /blog.thecybershadow.net/2012/12/14/64-bit-cacheset/

注意:CacheSet文章提到了CacheMan,但是最新版本似乎使用了与CacheSet相同的API-它只是打包到具有大量预设和其他功能的UI中。


0

我知道这很旧,但是对于遇到此问题的其他人:您需要使用管理权限手动运行CacheSet。如果不这样做,则会收到OutOfRange错误;它不会自动要求特权。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.