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