2016-04-12 23 views
1

同じドライブ上のあるフォルダから別のフォルダにファイルをコピーする際に問題が発生します。特定のフォルダへのコピーがずっと遅いのはなぜですか?

特定のフォルダにコピーする場合PROBLEM_FOLDERコピーには非常に時間がかかります。

私がテストとして作成した別のフォルダにコピーする場合OK_FOLDERコピーは非常に高速です。

私は誤ってCドライブを完全に埋め込んだ後、膨大な数のファイルをPROBLEM_FOLDERから削除しなければならなかったのですが、最初にこの問題に気付きました。

ここで問題が発生する可能性がありますか?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Diagnostics; 

namespace TestCopy 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 

      MoveFiles(@"C:\HOTDATA\DB\TEST", @"C:\PROBLEM_FOLDER\DB"); 
      //MoveFiles(@"C:\HOTDATA\DB\TEST", @"C:\OK_FOLDER\DB"); 
     } 

     public void MoveFiles(string sourceDir, string targetDir) 
     { 
      foreach(var file in Directory.GetFiles(sourceDir,"nEq*-1m*")) 
      { 

       string FileName = Path.GetFileName(file); 

       var targetPath = Path.Combine(targetDir, FileName); 
       if (File.Exists(targetPath)) 
       { 
        //File.Delete(targetPath); 
       } 
       else 
       { 
        File.Move(file, targetPath); 
       } 
      } 
     } 

    } 
} 
+0

私はNTFS(これはおそらくより多くの可能性があります)がどのように動作するのかわかりませんが、FATと同じ問題があります。フォルダ内のファイルが多くなるほど、ファイルの読み込み速度は遅くなります。 [This](http://serverfault.com/q/98235)はそれを証明します。 – Sinatr

+0

CCleanerで登録簿をクリーニングしてみてください – Glubus

+0

'Problem_Folder'にファイルがありますか?もしそうなら、このコード 'File.Exists(targetPath)'は遅くなります。いずれかのフォルダにインデックスを作成していますか? – christiandev

答えて

1

このフォルダにはシステムファイルが隠されている可能性があります。保護されていないシステムファイルを非表示にして非表示にするように表示設定を変更します。昔、C#は悪名高いほど、フォルダの反復処理が遅く、大きなフォルダで作業するにはある程度のやり方が必要でした。これは何年も前だったので、まだそれがあるかどうかは分かりません。

関連する問題