[問題]DirectoryInfo多執行序

看板C_Sharp (C#)作者 (ㄚㄚㄚ)時間13年前 (2012/07/30 18:26), 編輯推噓0(0027)
留言27則, 4人參與, 最新討論串1/1
我想比對資料夾底下的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

07/30 18:28, , 1F
不要讓費時的工作在主執行序執行 System.Treading
07/30 18:28, 1F

07/31 01:55, , 2F
是不建議用 System.Threading 嗎?
07/31 01:55, 2F

07/31 09:33, , 3F
不要在UI Thread裡面進行耗時的工作, 介面會卡住
07/31 09:33, 3F

07/31 09:33, , 4F
可以用 BackgroundWorker 或是 Thread 另外跑那些事情
07/31 09:33, 4F

07/31 15:20, , 5F
是說你可以用System.Threading.Thread去做這個比對
07/31 15:20, 5F

07/31 16:35, , 6F
我把Thread加在字串的比對上了,也加了BackgroundWorker
07/31 16:35, 6F

07/31 16:36, , 7F
現在UI不會卡住也有進度條了,但度似乎沒有感覺到變快
07/31 16:36, 7F

07/31 16:38, , 8F
是我加錯位置了,還是這樣已經剩下硬體的部分了?
07/31 16:38, 8F

07/31 16:56, , 9F
小問題先不管, 剩下的瓶頸會在 IO 跟 CPU 上
07/31 16:56, 9F

07/31 17:00, , 10F
可以先把計算MD5的部分改成同時跑兩個以上的檔案
07/31 17:00, 10F

07/31 17:00, , 11F
若你的IO尚未達到極限(例:計算小檔案),應該是能再加快的
07/31 17:00, 11F

07/31 17:04, , 13F
可參考 MSDN Task Parallel Library
07/31 17:04, 13F

07/31 17:05, , 14F
另外,若你計算MD5只是為了要挑出相同的檔案,
07/31 17:05, 14F

07/31 17:05, , 15F
那你可以先比較檔案大小,若檔案大小不同,就不用算MD5了
07/31 17:05, 15F

08/01 00:04, , 16F
謝謝,速度飛快了。但現在遇到另一個問題,當我遇到系統已
08/01 00:04, 16F

08/01 00:05, , 17F
開啟的檔案時,會跳出錯誤,我該怎麼跳過呢?
08/01 00:05, 17F

08/01 00:07, , 18F
還有一些資料夾也都會被拒絕存取
08/01 00:07, 18F

08/01 12:22, , 19F
try catch
08/01 12:22, 19F

08/01 12:23, , 20F
try不過的就換下個檔案或目錄吧
08/01 12:23, 20F

08/01 21:46, , 21F
比對的時候我成功跳過了,可是在算共有幾個檔案時我就不
08/01 21:46, 21F

08/01 21:47, , 22F
知道怎麼跳了
08/01 21:47, 22F

08/01 21:47, , 23F
di.GetFiles("*.*", SearchOption.AllDirectories).Length
08/01 21:47, 23F

08/02 00:18, , 24F
這個部分你要自己實作GetFiles來跳過出錯的目錄
08/02 00:18, 24F

08/02 00:19, , 25F
我的經驗是win7底下有一個系統的虛擬目錄會出錯誤
08/02 00:19, 25F

08/02 20:32, , 26F
恩恩~就是一直卡在"System Volume Information"資料夾
08/02 20:32, 26F

08/02 21:27, , 27F
現在只差如何更快的得到MD5,檔案超過500M就要等10幾秒了
08/02 21:27, 27F
文章代碼(AID): #1G5c4_eo (C_Sharp)
文章代碼(AID): #1G5c4_eo (C_Sharp)