取得資料夾檔案列表方式比較

EnumerateFiles及GetFiles之使用方式說明。

因為在工作上常常需要去資料夾裡,把所有某類型的檔案讀出來,所有之前常常使用GetFiles的方式,將資料夾裡的檔案取出。但是最近客戶在反映,如果檔案數多時,前面都會要等一段時間,才會開始跑。後來發現是GetFiles是把資料夾全部讀完後,才開始跑跑程式將檔案路徑取出,後來發現在.Net Framework 4.0以後,有多一個EnumerateFiles的方式,也可以把檔案取出,而且是每取出一筆,先顯示再取另一筆。因為怕以後也會用到,所以寫在這裡。

原程式處理方式:

var SDFFiles = Directory.GetFiles(OldSDFPath, "*.sdf", SearchOption.AllDirectories);
for (int i = 0; i < SDFFiles.Length; i++)
{
  FileInfo FI = new FileInfo(SDFFiles[i]);
  if (FI.Extension.ToString().Length == 4)
  {
    //將取得資料寫入資料庫中
    SSC.InsertSystemSource_Path(SDFFiles[i], iSystemSourceId);
    iTotal += 1;
    this.Invoke(UTT, new object[] { iTotal.ToString() });
  }
}

新程式處理方式:

var SDFFileList = Directory.EnumerateFiles(OldSDFPath, "*.sdf", SearchOption.AllDirectories);
foreach (var SDFFiles in SDFFileList)
{
  FileInfo FI = new FileInfo(SDFFiles);
  if (FI.Extension.ToString().Length == 4)
  {
    //將取得資料寫入資料庫中
    SSC.InsertSystemSource_Path(SDFFiles, iSystemSourceId);
    iTotal += 1;
    this.Invoke(UTT, new Object[] { iTotal.ToString() });
  }
}

最後列出二個語法在載入56568筆資料時,所需的時間

  開始時間 結束時間 所需時間
使用EnumerateFiles花費時間 11:32:13 11:56:17 00:24:04
使用GetFiles花費時間 11:58:14 12:24:42 00:26:28