首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#多线程文件IO (读取)

C#多线程文件IO (读取)
EN

Stack Overflow用户
提问于 2010-04-20 15:51:26
回答 8查看 7.9K关注 0票数 3

我们有一种情况,我们的应用程序需要处理一系列文件,而不是同步执行此功能,我们希望使用多线程来在不同的线程之间拆分工作负载。

每项工作是:

  1. 打开文件以供只读
  2. 处理文件中的数据
  3. 将处理后的数据写入字典

我们想要在一个新线程上执行每个文件的工作?这是可能的,我们应该更好地使用ThreadPool或产生新的线程,记住,每项“工作”只需要30ms,但它可能需要处理数以百计的文件。

任何让这件事变得更有效率的想法都是值得感谢的。

编辑:目前我们正在使用ThreadPool来处理这个问题。如果我们有500个文件要处理,我们循环遍历这些文件,并使用QueueUserWorkItem将每个“处理工作单元”分配给线程池。

是否适合使用线程池来实现这一点?

EN

回答 8

Stack Overflow用户

发布于 2010-09-16 19:14:49

我建议您使用ThreadPool.QueueUserWorkItem(...),在这种情况下,线程由系统和.net框架管理。你与你自己的线程池结合的机会要高得多。所以我建议你使用.net提供的线程池。它非常容易使用,

代码语言:javascript
复制
ThreadPool.QueueUserWorkItem(new WaitCallback(YourMethod), ParameterToBeUsedByMethod); 

YourMethod(object o){ Your Code here... }

有关更多信息,请访问链接http://msdn.microsoft.com/en-us/library/3dasc8as%28VS.80%29.aspx

希望,这很有帮助

票数 8
EN

Stack Overflow用户

发布于 2010-04-20 15:54:08

我建议你有一个有限数量的线程(比如4个),然后有4个工作池。也就是说,如果你有400个文件要处理,那么每个线程平均分配100个文件。然后,您生成线程,并将它们的工作传递给每个线程,让它们运行,直到它们完成特定的工作。

你只有一定数量的I/O带宽,所以拥有太多的线程不会带来任何好处,还要记住,创建线程也需要很少的时间。

票数 2
EN

Stack Overflow用户

发布于 2010-04-20 17:29:53

我建议使用更高级的库,比如Parallel Extensions (PEX),而不是直接处理线程或管理线程池:

代码语言:javascript
复制
var filesContent = from file in enumerableOfFilesToProcess
                   select new 
                   {
                       File=file, 
                       Content=File.ReadAllText(file)
                   };

var processedContent = from content in filesContent
                       select new 
                       {
                           content.File, 
                           ProcessedContent = ProcessContent(content.Content)
                       };

var dictionary = processedContent
           .AsParallel()
           .ToDictionary(c => c.File);

PEX将根据可用的核心和负载来处理线程管理,同时您可以专注于手头的业务逻辑(哇,这听起来像是商业广告!)

PEX是.Net Framework4.0的一部分,但作为the Reactive Framework的一部分,还可以使用到3.5的后端口。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2673448

复制
相关文章

相似问题

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