我想写一个快速的多线程程序使用c#读取一个文件。
因此,必须将文件分成几个部分,每个部分在不同的线程中进行处理。对于ex:
Line1
Line2
Line3
Line4必须拆分为4行,如下所示:
Line1 => thread 1
Line2 => thread 2
Line3 => thread 3
Line4 = > thread 4我使用了StreamReader.readLine(),但它无法读取指定行。
评论:有必要加速程序,所以我想在单独的线程中读取文件。
发布于 2011-10-20 04:08:26
除非您使用的是固定长度的行,否则这是不可能的。
为什么?因为为了确定“行”在哪里拆分,您需要找到换行符...这意味着您需要先读取该文件。
现在,如果您只是想在读取每一行的之后执行一些额外的“处理”-这是可能的,并且使用ThreadPool是相对简单的。
发布于 2011-10-20 04:09:11
您应该在单个线程中读取该文件-但随后将每行的处理派生到不同的线程,例如,通过将其添加到生产者/消费者队列。
即使您可以在文本文件中查找特定的行(通常您不能),您也不希望磁盘来回摆动-这只会减慢速度。从磁盘上获取数据的最快方法是按顺序读取数据。除了“将二进制数据解码为文本”之外,一定要把处理这行代码的所有事情都交给其他线程来处理,但是您真的不希望IO处于多个线程中。
发布于 2011-10-20 04:11:12
AFAIK .NET不支持并行流读取。如果你想处理每一行,你可以使用File.ReadAllLines。它返回一个字符串数组。然后使用你可以使用PLINQ。
var result = File.ReadAllLine("path")
   .AsParallel()
   .Select(s => DoSthWithString(s))
   .ToList();https://stackoverflow.com/questions/7827458
复制相似问题