web-dev-qa-db-ja.com

単一のディレクトリ(NTFS)に非常に多くのファイルがある場合、ファイルシステムのパフォーマンスが低下する可能性がありますか?

1つのディレクトリ内のファイル数が非常に多くなると(例:> = 10.000.000アイテム)、ファイルシステムのパフォーマンス(NTFSパーティション上)が低下し始める可能性があると聞きました。それは本当ですか?

Trueの場合、1つのディレクトリに推奨されるファイルの最大数はいくつですか。

編集:

パフォーマンスについて:そのフォルダー内のファイル操作(読み取り、書き込み、作成、削除)が遅くなる可能性があることを考えています。

6
tigrou

私は自分の質問に答えます:はい、それは間違いなく遅いです。

フォルダー内に多くの空のファイルを作成し、それらにランダムにアクセスするC# Console Applicationを作成しました。結果は次のとおりです。

10 files in a folder        : ~26000 operation/sec
1.000.000 files a in folder : ~6000 operation/sec

ソースコードは次のとおりです。

List<string> files = new List<string>();

Console.WriteLine("creating files...");
for (int i = 0; i < 1000 * 1000; i++)
{
    string filename = @"C:\test\" + Guid.NewGuid().ToString();
    using (File.Create(filename));
    files.Add(filename);
}

Console.WriteLine("benchmark...");            
Random r = new Random();
Stopwatch sw = new Stopwatch();
sw.Start();

int count = 0;
while (sw.ElapsedMilliseconds < 5000)
{
    string filename = files[r.Next(files.Count)];
    string text = System.IO.File.ReadAllText(filename);
    count++;
}
Console.WriteLine("{0} operation/sec ", count / 5);
7
tigrou

this を読むと、NTFSがファイルとフォルダのインデックス作成をどのように機能するかをかなりよく理解できているはずです。

上記のリンクのガイドラインに従っている場合、ローカルでは、ファイルやフォルダーのインデックスを作成するヘーゼルはそれほど多くないはずですが、その数のファイルで多くのメンテナンスが必要になります。
ネットワークでは別の話になります。遅くなります。これは、数千のフォルダーを含むフォルダーがあり、ネットワーク経由でインデックスを作成するのに時間がかかる、私自身の職場での経験によるものです。

その多くのファイルでおそらく増加するもう1つのことは、short-naming:を無効にすることです。これにより、Windowsは 8.3規則(MS-DOSファイル命名規則) に従う2番目のファイルディレクトリエントリを作成できなくなります。列挙するときに長い名前に関連付けられた短い名前を検索する必要がないため、フォルダが列挙する時間を短縮します。

  • スタートメニューRunに移動します
  • cmdと入力し、コマンドプロンプトが表示されたら、それを右クリックしてRun as administratorを選択します。
  • コマンドプロンプトfsutilの動作を設定すると、disable8dot3 1を設定して、短い名前を無効にします
  • リブート

再度有効にする場合は、fsutil Behavior set disable8dot3 0と入力します。

2
Jesper Jensen