web-dev-qa-db-ja.com

Windows 7のディスクキャッシュを増やす方法

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のキャッシュを使用していることを示しています(テスト実行中は増加しません)。 9000ファイルをキャッシュするようにWindows 7を「推奨」するための提案はありますか?

19

CacheSetツールを使用してキャッシュサイズを増やしてみましたが、指定した値は範囲外と見なされます。

  1. CacheSetを「管理者として」明示的に実行していることを確認してください。 CacheSetは、anythingがうまくいかない場合、値が範囲外であると言います。
  2. キャッシュサイズが4 KBで割り切れるようにします

また、おそらく2006年の32ビットアプリケーションであるため、大きな値でCacheSetに問題があることに気づきました。4GBを超えるキャッシュサイズを設定できるように、同じAPIで64ビットプログラムを作成しました。 http://blog.thecybershadow.net/2012/12/14/64-bit-cacheset/

注:CacheSetの記事ではCacheManについて言及していますが、最新バージョンはCacheSetと同じAPIを使用しているようです-一連のプリセットやその他の機能を備えたUIにパッケージ化されているだけです。

4

Superfetchは、大きなファイルのすべてをキャッシュするのではなく、アクセスされる部分だけをキャッシュします。そのため、そのファイルにアクセスするには、まだディスクの読み取りが必要です。私のように210MBのディスクキャッシュは、Windowsの小さなファイルすべてからすべてをキャッシュできます。そしてその性能は目立ちます。しかし、それがより高速なシステムに影響を与えるとは思えません。

4
Soren

私はこれが古いことを知っていますが、この問題に遭遇する他の人のために:管理者権限で手動でCacheSetを実行する必要があります。そうしないと、OutOfRangeエラーが発生します。自動的に特権を要求することはありません。

0
Jan Schejbal