2

オペレーティング システムのブロック キャッシュにできるだけ多くの大きなファイルを保持する必要がありますが、それは RAM に収まりきらないほど大きく、別の非常に大きなファイルを継続的に読み込んでいます。ATM 別のファイルから読み取りをストリーミングするときに、システム キャッシュから大きな重要なファイルの大きなチャンクを削除します。

4

6 に答える 6

3

Linux 内では、必要に応じて使用可能なスワップ メモリをバッキングとして使用するタイプtmpfsとしてファイル システムをマウントできます。メモリ サイズよりも大きなファイル システムを作成できるはずであり、システム キャッシュ内のそのファイル システムのコンテンツが優先されます。

mount -t tmpfs none /mnt/point

参照: http://lxr.linux.no/linux/Documentation/filesystems/tmpfs.txt

また、ファイルswapinessdrop_cache/proc/sys/vm

于 2008-09-25T01:26:53.877 に答える
3

Windows を使用している場合は、スキャンしているファイルを次のフラグで開くことを検討してください。

FILE_FLAG_SEQUENTIAL_SCAN

使用することもできます

FILE_FLAG_NO_BUFFERING

ただし、読み取りサイズとバッファーの配置にいくつかの制限が課されます。

于 2008-09-30T17:11:35.210 に答える
3

Linux や Solaris などの POSIX システムでは、posix_fadvise を使用してみてください。

ストリーミング ファイルで、次のようにします。

posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL);
while( bytes > 0 ) {
  bytes = pread(fd, buffer, 64 * 1024, current_pos);
  current_pos += 64 * 1024;
  posix_fadvise(fd, 0, current_pos, POSIX_FADV_DONTNEED);
}

また、他のファイルに POSIX_FADV_WILLNEED を適用すると、メモリの優先度を上げることができます。

これで、Windows Vista と Server 2008 もメモリの優先順位をうまく利用できることがわかりました。おそらく、XP のような古いバージョンでも、より基本的なトリックを行うことができます。しかし、私は頭のてっぺんから機能を知らず、それらを調べる時間がありません。

于 2008-09-30T17:21:30.007 に答える
1

一部のオペレーティング システムには、RAM のセグメントをストレージ用に確保し、それをファイル システムとしてマウントするために使用できる RAM ディスクがあります。

しかし、私が理解できないのは、オペレーティング システムがファイルをキャッシュしないようにしたい理由です。あなたの完全な質問は、私には本当に意味がありません。

于 2008-09-25T01:20:21.617 に答える
0

mlock() と mlockall() はそれぞれ、呼び出しプロセスの仮想アドレス空間の一部またはすべてを RAM にロックし、そのメモリがスワップ領域にページングされるのを防ぎます。

(MLOCK(2) Linux man ページからコピー)

于 2008-09-30T17:07:07.997 に答える
0

より多くの RAM を購入するか (比較的安価です!)、OS に任せましょう。OS を回避することは、その価値よりも面倒なことになることがわかると思います。OS は、あなたのアプリケーションや他のアプリケーションがメモリを必要とするまで、必要なだけファイルをキャッシュします。

プロセスの数を最小限に抑えることもできると思いますが、メモリを購入した方が早いでしょう。

于 2008-09-25T10:53:10.803 に答える