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 |