0

はるかに大きなサンプルの山から、特定のタイプごとにいくつかの有効なサンプルを取得する小さなアプリを作成しています。

構造は次のようになります。

ROOT->STATE->TYPE->SAMPLE

私のプログラムは州を巡回し、それぞれの固有の型とその型へのパスを取得します。それらがすべて取得されると、各タイプを調べて、ユーザーが提供する X を使用して、X 個のランダム サンプルを選択します。

このプログラムはローカルでは問題なく動作しますが、ネットワーク経由では明らかに非常に遅くなります。私はこれを支援するための手段を講じましたが、私が最後に取り掛かったのは、TYPE ディレクトリからランダム サンプルをすばやく取得することです。

ローカルで、私は使用します

    List<String> directories = Directory.GetDirectories(kvp.Value).ToList();

これをネットワーク経由で実行するときのボトルネックはどれですか。これは不可能かもしれないと感じていますが、最初にすべてのサンプルを特定せずに、たとえば TYPE ディレクトリから 5 つのランダムなサンプルを取得する方法はありますか?

うまくいけば、私は十分に明確になりました、ありがとう。

4

2 に答える 2

0

おそらく、DirectoryInfo を使用してみてください。特定のディレクトリに対して多数の呼び出しを行う場合は、すべてのアクセスでセキュリティがチェックされないため、より高速です。

于 2013-04-23T18:39:39.013 に答える
0

必要なルートとサブフォルダーに DirectoryInfo オブジェクトを使用し、そのようにディレクトリを一覧表示すると、速度が向上する場合があります。.NET の遅延初期化戦略は、サンプルで使用する静的なディレクトリ メソッドを使用して、より多くのネットワーク ラウンドトリップが必要になることを意味するため、速度がわずかに向上します。

次の質問は、なぜ速度が重要なのかということです。迅速なアクセスのために、独自の設計のキャッシュに最新のインデックスを維持するなどのことを考えたことはありますか? FileSystemWatcher、通常のポーリング、またはその両方を使用していますか?

このリンクにも興味があると思います: Checking if folder has files

... 1 つの呼び出しからディレクトリ構造全体に関する情報を取得することにより、ネットワーク呼び出しを最小限に制限することに関する情報が含まれています。ただし、これによりメモリ要件が増加することは間違いありません。

各種類のファイルの名前は予測可能ですか? いくつかのサンプル名をランダムに予測し、それらを直接読み取ることで運が良くなるでしょうか?

于 2013-04-23T18:49:58.913 に答える