3

2 つのファイルに基づいて仮想ファイル システム (fat に非常に似ている) を作成しました。

  1. 最初のファイル - アロケーション テーブル。

ファイルの割り当てに関する情報を保存します(実際にはファイルではありませんが、気にしません)

各レコードの構造は次のとおりです。

  1. 名前 - 固定サイズ (100 バイト)。最初の 4 バイトは文字列の長さです
  2. 長さ - 4 バイト、ファイルの全長
  3. StartCluster - 開始クラスターの 4 バイト ID
  4. EndCluster - エンド クラスタの 4 バイト ID

各エントリは固定サイズで、メモリ内にハッシュテーブルがあり、各エントリの位置を見つけるのに役立ちます。

  1. 2 番目のファイル - 仮想ドライブ

クラスターに基づく VD。各クラスタのサイズは 256 バイトに固定されています。最後の 4 バイトは、ファイル チェーン内の次のクラスターへのポインターです。

問題は、すべてのファイルを読み込もうとするときの速度が非常に遅いことです。どうすればパフォーマンスを向上させることができますか? ハード ドライブから高速に読み取るためのヒントはありますか。

例: 大きなブロックごとにファイルを読み取るのは良い考えですか? ファイルの一部でも読み込むと、ファイルは OS によってキャッシュされますよね? そして次回は、HDからではなくメモリからデータを取得しますか?

そのような質問がいくつかありますが、どこで答えを得ることができますか?

4

1 に答える 1

2

いくつかのオプション;

  • クラスタ サイズを大きくすることができます (256 バイトは小さく、最近のほとんどの OS はクラスタに 4KB+ を使用します)。

  • すべてのファイルを読み取る場合は、startCluster に基づいて並べ替えを行うことができるため、ディスク上で互いに物理的に近い順にファイルを読み取ることができます。したがって、OS が 4K+ ブロックをフェッチするときはいつでも、次のファイルでそのブロックの他の部分が必要になる可能性が高くなります。

  • 仮想ディスク ファイルを最適化できます

  • ディスク読み取りの問題であると確信しているようです。ファイルを読んだ後にファイルをどうするか、遅い部分ではないことを確認しましたか?

  • 多くのランダム アクセスは、SSD ストレージが優れているところです。仮想ディスクを SSD に移動する

于 2012-08-13T12:33:16.747 に答える