问题描述
我需要利用C#多线程从一个文本文档中(10万行数据),读出每条数据,并交给一个方法来处理,本人对多线程不是很了解,不清楚怎么能控制每个线程读取的不是重复的数据,忘解答,最好有简要代码案例,感谢!
解决方案
解决方案二:
IO速度就是硬伤你开百万个线程读取速度也还是那样结果不仅没有加快效率反而还增加cpu轮询时间就好比你2M的宽带你开再多的线程也无法达到100M/S
解决方案三:
怎么又是多线程,究竟是谁给你灌输了多线程无所不能的思想?难道是蓝翔?
解决方案四:
2楼抱歉,其实我有10万条数据,需要挨着读出每条数据交给一个方法处理,以前的处理方式太慢了,希望找到更好的解决方式,因为对多线程不是很了解,所以才来咨询,如果你有更好的方式还望指教,谢谢!
解决方案五:
如果你有10万个文件,可以考虑PLinq处理。对于单个文件,读取其数据时其window驱动本身就是单线程同步的流操作,没有理由在读取数据流时考虑并发。假设说你的“处理方法”很很耗时,但是又并不占用cpu太多时间(而是因为别的因素而耗时),同时又是可以并发地处理不同的数据行的,那么也可以考虑PLinq处理。然而看你的简单说明,应该也不是,也没有理由在处理是考虑并发。
解决方案六:
要想改进一个算法或者系统的表现,不是不能从“提高并发处理程度”角度去设计。但是这需要从一定的深度进行设计,甚至重构。如果你只是很浅地说了“顺序读取文本文件,然后交给一个方法处理”这样一句话,就来直接空想“并发处理”,确实有些冲动了。
解决方案七:
读到不同的数组里面,然后再多线程处理
解决方案八:
生产者,消费者模型使用一个线程专门读文件,写到队列。另外一个线程来消费队列,处理数据。
解决方案九:
感觉楼上的思路可取,先把文件读取到内存里面,然后再用并行计算处理内存中的数据。百度搜索:并行计算。
解决方案十:
多线程似乎不能提升你的这个问题.试试一次多读几行.比如一次1000行数据,然后处理.另一个,你读取出的数据是怎么处理的?存放到数据库中?EXCEL中?这个存放也是比较耗时的,也可以考虑多条一次处理.这个我做过测试,存到SQL和EXCEL的时候,多条一次写入比一次一条写入要快很多.
解决方案十一:
引用3楼wjp16351的回复:
2楼抱歉,其实我有10万条数据,需要挨着读出每条数据交给一个方法处理,以前的处理方式太慢了,希望找到更好的解决方式,因为对多线程不是很了解,所以才来咨询,如果你有更好的方式还望指教,谢谢!
从硬盘读取是不能并发的,除非是n块硬盘,你处理一条数据要花多少时间?如果小于读取一条数据的时间,那多线程更慢。
解决方案十二:
数据有没有先后?要是有,用多线程还是要等前一条完了才能继续
解决方案十三:
如果是这样。1.建立filestream选择可共享读取2.多线程并行读取(不是用readline读取整行,而选择使用定点和相对偏移量读取,相对偏移量可以自己估算一下一行大概多少字节,建议稍微比这个大个3%左右)3.因为是这种方式读取所以需要你自己去判定一下硬回车位置,通记录一下这个位置当作下次的定点开始位置