看板 C_Sharp 關於我們 聯絡資訊
我想比對資料夾底下的MD5 但指到較大的目錄時 整個GUI會當掉,而且等待相當久的時間 想請問如何使用多執行序來比對,或是有更快的方法 謝謝 附上目前的程式碼 http://webhd.xuite.net/_oops/huadi73/heb -- posted from Symbian bbs reader on my Nokia 3310 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.124.85.135
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