加速控制台应用程序,并发? Parralell编程?

时间:2015-10-15 06:55:54

标签: c# multithreading concurrency

我有以下(简化)控制台应用程序:

DirectoryInfo d = new DirectoryInfo(@"D:\Test");
FileInfo[] Files = d.GetFiles("*.txt"); 
foreach(FileInfo file in Files )
{
  //Do Something
}

文件夹中有200多个文件。每个文件的处理大约需要15分钟。

我的问题是,我是否可以使用并发/并行编程来处理多个文件?

我想的是,开始一些线程?并且每个人都将处理文件列表中每隔5个左右的文件。

所有文件处理都是完全独立的,因此没有竞争条件的风险。

如果可以,我可以启动多少个线程或其他任何限制。

将要完成的工作是将每个文件的内容加载到通用列表中,对其进行处理并多次遍历列表

2 个答案:

答案 0 :(得分:3)

Parallel.ForEach似乎表现不错。它将为您提供真正的并行化,因为它可以将每次迭代计划到不同的CPU核心。

  

如果可以,我可以开始的线程数有限制,   或任何其他限制。

我不会产生数百个线程来执行这项工作,因为处理大量线程可能会花费更多时间,因为你的CPU和磁盘太忙了。

答案 1 :(得分:1)

Task based approach can be a solution, control your task based on available
resources.
        DirectoryInfo d = new DirectoryInfo(@"D:\Test");
        FileInfo[] Files = d.GetFiles("*.txt");
        foreach (FileInfo file in Files)
        {
           //Check items in ConcurrentDictionary, if exceeds the limit -
           //wait here

            Task t = Task.Factory.StartNew((Object o) =>
            {
              //Do your work
            }, file);

            //Add items in ConcurrentDictionary;
        }