.net多线程

yukai001 2012-03-19 02:03:26
上百万文件,读每个文件所用时间有很大差异,
我想启动比如5个线程去读。
Thread[] t=new Thread[5];
1.实例化每个线程
2.t[1].start()....t[5].start();

我想这样做:
假如t[2]先运行完。
用t[2]去读第六个文件
接着t[4]先运行完。
用t[4]去读第7个文件
...全文
100 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yukai001 2012-03-20
  • 打赏
  • 举报
回复
因为读取时间不一样,我怎么知道哪个线程先运行完呢?
xiaoyu821120 2012-03-19
  • 打赏
  • 举报
回复
我想lz读的文件,应该是从nas上读取的,用多线程当然能提高读取速度。
一种做法,可以先把文件信息,全部读取到一个数组中,然后平分一下。
如果你觉得把文件信息读取进来也太慢,可以考虑一种相对平均的分配方法,比如修改时间,比如文件名,比如文件大小等等。
laichunlin 2012-03-19
  • 打赏
  • 举报
回复
以前没这样用过,帮顶一个!
startstartsvip 2012-03-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 yukai001 的回复:]
上百万文件,读每个文件所用时间有很大差异,
我想启动比如5个线程去读。
Thread[] t=new Thread[5];
1.实例化每个线程
2.t[1].start()....t[5].start();

我想这样做:
假如t[2]先运行完。
用t[2]去读第六个文件
接着t[4]先运行完。
用t[4]去读第7个文件
[/Quote]


五个去读,正如2楼所说,可能没累死,给折腾死

一般 2,3 个就够了

1)你可以 用 queue/list 加锁

2).net 4.0 巨简单 先得到所有文件 fileinfo[]

然后

并行for/foreach
threenewbee 2012-03-19
  • 打赏
  • 举报
回复
没有意义。

读写文件的瓶颈在IO而不是在CPU,多线程只能让性能更差。
一方面,操作系统的异步IO访问机制已经足够优化,实现延迟隐藏,另一方面,对于机械磁盘,并发的磁盘访问增加了寻道,降低了速度。
如果文件不是很大(总数在系统内存的1/10,比如对于8GB内存系统,文件总数小于1GB),直接读取到内存处理也是不错的选择。

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧