[C#] 複製、刪除、搬移 大量的資料(mass datas?)

2020-01-09

最近在處理一些東西,然後建立了一些資料大概就是一個檔案夾裡面有幾百萬個小檔,所以就想說用程式刪除,發現非常的慢,於是我測了一些東西,這速度目前還算可以接受,一個檔案夾裡面有 1,200,000 個檔案要進行刪除,最後我電腦花了 19分鐘,進行複製到其他檔案夾並且刪除原本的 120萬個檔案,這動作就是搬移,簡單的說就是使用 Parallel.ForEach 加上使用 win32 的函式庫
這程式主要是網路上看許多案例綜合所測出來的結論,並非都是我寫的,這邊要說明一下。

這是我電腦配置:



第一步
首先,說明一下我是從 E:\TEST_SOURCE\ 裡面有 120萬個檔案,並且內容大概大概就是一個 1K 不到的資料,要移動到 E:\TEST_TARGET\,如果沒有你就是慢慢寫入資料來測,我也是花蠻多時間寫入這120萬筆。

第二步
開一個 CS 檔案,引入下面的 lib


第三步
接下來就是呼叫端了




我的測試結果,如果你沒有用 Parallel.ForEach 大概花了我 50  分鐘,上面的程式碼式 Parallel.ForEach 這配合起來,大概搬移完只花了 19分鐘26秒。

如果不用  Win32 去取得 120萬資料的檔名大概要花我2x 秒,但是如果使用上述的作法 GetFilesUnmanaged 大概只有十幾秒就做可以取完,這數據也給一下,下面連結是我主要參考的地方,如果我寫的不清楚,可以參考原網址,希望幫到後面採坑的人
reference :
https://stackoverflow.com/questions/2185837/delete-a-large-number-100k-of-files-with-c-sharp-whilst-maintaining-performan


當麻許的超技八 2014 | Donma Hsu Design.