2016-09-29 6 views
2

私はプロジェクトを行っています。以前はブログ記事はフォルダ内のテキストファイルでした。これで、SQL Server 2008サーバーのデータベースにアーティクルコンテンツを格納します。DirectoryInfo 8K以上のファイルを持つGetFiles()

今はファイル名を取得しようとしているだけで、レコードは挿入されません。今は仕上げに15分以上かかります。これはWindowsフォームです。ここで

は、私が今持っているものです。

private void LoadButton_Click(object sender, EventArgs e) 
{ 
    var dirInfo = new DirectoryInfo(@"P:\op\articles"); 

    foreach (var currFile in dirInfo.GetFiles()) 
    { 
     using (StreamReader sr = new StreamReader(currFile.FullName)) 
     { 
      OutputTextBox.Text += currFile.FullName + "\r\n"; 
     } 
    } 
} 

がありますとにかく私はそれだけでグラブが1kの記事が処理してから削除するように言って何かを行うことができますか?この作業をより迅速に行うためのより効率的な方法はありますか?

+0

8kファイルを1つのディレクトリに置くことはできませんか?おそらく、それぞれのサブディレクトリの数を減らして、たくさんのサブディレクトリを作ることができますか? – ashlar64

+1

なぜ各ファイルのStreamReaderを初期化するのですか?ちょっと興味があるんだけど。 –

+0

IEnumerable を使用すると、一度に8000のチャンクを取得できるため、一度に100個以上の処理を行うことができます。 – confusedandamused

答えて

4

Directory.EnumerateFilesをご覧ください。私は、コレクションを遅れて列挙し、大きなファイルセットに対してより効率的にそれらを戻し、あなたが反復を制御できるようにすると信じています。

参照:Directory.EnumerateFiles

+2

興味深いことに、MSDN [GetFiles()](https://msdn.microsoft.com/en-us/library/4cyf24ss(v = vs.110).aspx)docsはEnumerateFiles for –

+0

ニース - この回答は、OPワット頼む。特に大きな初期データセットの場合。これを行うことで、コレクションを構築するのとは対照的に、各要素がメモリに持ち込まれるときにそれらを処理することができます。 @SimonWilsonドキュメントは時にはうれしい、右:P – confusedandamused

関連する問題