2012-03-13 14 views
1

ネットワークドライブ文字Wにマップされたファイルサーバーを持っています。これには732のメインフォルダとサブフォルダとたくさんのファイルがあります。私はこのドライブに仮想ディレクトリをマップし、それを "Documents"と名づけました。GetFiles/GetDirectoriesとEnumerateDirectories/EnumerateFiles UNC /仮想ディレクトリのパフォーマンスペナルティ

ここでは、「最終」が含まれているフォルダのみを検索するのにかかる時間を確認したいと思います。私はまだWebアプリケーションではないコンソールアプリケーションを作成し、私に結果を非常に非常に遅く希望していない与えたコードの下に書く。これは私が唯一の最初の実行時に5分と秒で6分で、ファイル名ではないフォルダを与えたコード

DateTime startdatetime = DateTime.Now; 
var dirs = from dir in 
Directory.EnumerateDirectories("W:\\", "*Final*", SearchOption.AllDirectories) 
select dir; 
foreach (var dir in dirs) 
{ 
    Console.WriteLine(dir); 
} 
DateTime EndDate = DateTime.Now; 
TimeSpan t = EndDate - startdatetime; 
Console.WriteLine(t.Minutes); 
Console.ReadLine(); 

の下に見つけてください。私はフォルダのみを取得するために使用 古いコードは、上記のコードは、6~7分で私のフォルダのリストを与えた

DateTime startdatetime = DateTime.Now; 
string[] dirs = 
    Directory.GetDirectories("W:\\", "*Final*", SearchOption.AllDirectories); 
foreach (var dir in dirs) 
{ 
    Console.WriteLine(dir); 
} 
DateTime EndDate = DateTime.Now; 
TimeSpan t = EndDate - startdatetime; 
Console.WriteLine(t.Minutes); 
Console.ReadLine(); 

ました。 コードの上にファイルとフォルダを結合すると12分で結果が得られます。それはウェブ上で大きなパフォーマンスペナルティです。

この罰金を減らす方法を知っている人はいますか?私はここで立ち往生している。

+2

いくつの結果がありますか? 'Console.WriteLine(dir);'を削除するとどれくらいかかりますか? –

+0

ドライブはどのくらいの頻度で変更されますか?なぜ最初のペナルティを取らないと、[FileSystemWatcher](http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.created.aspx)をそのドライブに作成する必要はありませんすべてを常に研究していますか? – Tung

+0

あなたの目標は何ですか? – Gabe

答えて

1

ディレクトリとファイル全体が非常にコストがかかります。それがなぜ必要なのか調べてみてください。 1つのディレクトリを取得してその中のファイルを検索しないでください。私はあなたの技術チームとビジネスオーナーとの分析をして、すべてが現実的であるようにすることを意味します。

私が考えることができる唯一のことは、CPUを利用できるように、通常のループではなくループごとにParallelを使用することです。しかし、それはコストを削減するが、劇的に減少することはない。

+0

並列ループ?私は前にそれを聞いていない... hmmm 私はマップされたネットワークドライブを使用しているので、なぜこれは遅いですか? –

+0

私は自分のコードをforeachに変換できますか? –

+1

http://msdn.microsoft.com/en-us/library/dd460720.aspxを参照してください。これはforeachに関する詳細情報を提供します。元の質問にも答えが出ます。 – Shailesh

1

私は彼らの要求が全く変わっていないと思っています。小さなDBを持つことができますが、ドキュメントフォルダとそのファイルパスと同期しており、クエリ結果はIOファイルではなくテーブル上にある可能性があります。

関連する問題