作者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