首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#读取文本文件行多线程

C#读取文本文件行多线程
EN

Stack Overflow用户
提问于 2011-10-20 04:06:36
回答 6查看 3.1K关注 0票数 0

我想写一个快速的多线程程序使用c#读取一个文件。

因此,必须将文件分成几个部分,每个部分在不同的线程中进行处理。对于ex:

代码语言:javascript
运行
复制
Line1
Line2
Line3
Line4

必须拆分为4行,如下所示:

代码语言:javascript
运行
复制
Line1 => thread 1
Line2 => thread 2
Line3 => thread 3
Line4 = > thread 4

我使用了StreamReader.readLine(),但它无法读取指定行。

评论:有必要加速程序,所以我想在单独的线程中读取文件。

EN

回答 6

Stack Overflow用户

发布于 2011-10-20 04:08:26

除非您使用的是固定长度的行,否则这是不可能的。

为什么?因为为了确定“行”在哪里拆分,您需要找到换行符...这意味着您需要先读取该文件。

现在,如果您只是想在读取每一行的之后执行一些额外的“处理”-这是可能的,并且使用ThreadPool是相对简单的。

票数 5
EN

Stack Overflow用户

发布于 2011-10-20 04:09:11

您应该在单个线程中读取该文件-但随后将每行的处理派生到不同的线程,例如,通过将其添加到生产者/消费者队列。

即使您可以在文本文件中查找特定的行(通常您不能),您也不希望磁盘来回摆动-这只会减慢速度。从磁盘上获取数据的最快方法是按顺序读取数据。除了“将二进制数据解码为文本”之外,一定要把处理这行代码的所有事情都交给其他线程来处理,但是您真的不希望IO处于多个线程中。

票数 5
EN

Stack Overflow用户

发布于 2011-10-20 04:11:12

AFAIK .NET不支持并行流读取。如果你想处理每一行,你可以使用File.ReadAllLines。它返回一个字符串数组。然后使用你可以使用PLINQ。

代码语言:javascript
运行
复制
var result = File.ReadAllLine("path")
   .AsParallel()
   .Select(s => DoSthWithString(s))
   .ToList();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7827458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档