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を「推奨」するための提案はありますか?
CacheSetツールを使用してキャッシュサイズを増やしてみましたが、指定した値は範囲外と見なされます。
また、おそらく2006年の32ビットアプリケーションであるため、大きな値でCacheSetに問題があることに気づきました。4GBを超えるキャッシュサイズを設定できるように、同じAPIで64ビットプログラムを作成しました。 http://blog.thecybershadow.net/2012/12/14/64-bit-cacheset/
注:CacheSetの記事ではCacheManについて言及していますが、最新バージョンはCacheSetと同じAPIを使用しているようです-一連のプリセットやその他の機能を備えたUIにパッケージ化されているだけです。
Superfetchは、大きなファイルのすべてをキャッシュするのではなく、アクセスされる部分だけをキャッシュします。そのため、そのファイルにアクセスするには、まだディスクの読み取りが必要です。私のように210MBのディスクキャッシュは、Windowsの小さなファイルすべてからすべてをキャッシュできます。そしてその性能は目立ちます。しかし、それがより高速なシステムに影響を与えるとは思えません。
私はこれが古いことを知っていますが、この問題に遭遇する他の人のために:管理者権限で手動でCacheSetを実行する必要があります。そうしないと、OutOfRangeエラーが発生します。自動的に特権を要求することはありません。