→ optimist9266:不要讓費時的工作在主執行序執行 System.Treading 07/30 18:28
→ huadi73:是不建議用 System.Threading 嗎? 07/31 01:55
→ iterator:不要在UI Thread裡面進行耗時的工作, 介面會卡住 07/31 09:33
→ iterator:可以用 BackgroundWorker 或是 Thread 另外跑那些事情 07/31 09:33
→ optimist9266:是說你可以用System.Threading.Thread去做這個比對 07/31 15:20
→ huadi73:我把Thread加在字串的比對上了,也加了BackgroundWorker 07/31 16:35
→ huadi73:現在UI不會卡住也有進度條了,但度似乎沒有感覺到變快 07/31 16:36
→ huadi73:是我加錯位置了,還是這樣已經剩下硬體的部分了? 07/31 16:38
→ iterator:小問題先不管, 剩下的瓶頸會在 IO 跟 CPU 上 07/31 16:56
→ iterator:可以先把計算MD5的部分改成同時跑兩個以上的檔案 07/31 17:00
→ iterator:若你的IO尚未達到極限(例:計算小檔案),應該是能再加快的 07/31 17:00
→ iterator:可參考 MSDN Task Parallel Library 07/31 17:04
→ iterator:另外,若你計算MD5只是為了要挑出相同的檔案, 07/31 17:05
→ iterator:那你可以先比較檔案大小,若檔案大小不同,就不用算MD5了 07/31 17:05
→ huadi73:謝謝,速度飛快了。但現在遇到另一個問題,當我遇到系統已 08/01 00:04
→ huadi73:開啟的檔案時,會跳出錯誤,我該怎麼跳過呢? 08/01 00:05
→ huadi73:還有一些資料夾也都會被拒絕存取 08/01 00:07
→ proach:try catch 08/01 12:22
→ proach:try不過的就換下個檔案或目錄吧 08/01 12:23
→ huadi73:比對的時候我成功跳過了,可是在算共有幾個檔案時我就不 08/01 21:46
→ huadi73:知道怎麼跳了 08/01 21:47
→ huadi73:di.GetFiles("*.*", SearchOption.AllDirectories).Length 08/01 21:47
→ optimist9266:這個部分你要自己實作GetFiles來跳過出錯的目錄 08/02 00:18
→ optimist9266:我的經驗是win7底下有一個系統的虛擬目錄會出錯誤 08/02 00:19
→ huadi73:恩恩~就是一直卡在"System Volume Information"資料夾 08/02 20:32
→ huadi73:現在只差如何更快的得到MD5,檔案超過500M就要等10幾秒了 08/02 21:27