C# 加快控制台应用程序、并发性?Parralell编程?

C# 加快控制台应用程序、并发性?Parralell编程?,c#,multithreading,concurrency,C#,Multithreading,Concurrency,我有以下(简化的)控制台应用程序: DirectoryInfo d = new DirectoryInfo(@"D:\Test"); FileInfo[] Files = d.GetFiles("*.txt"); foreach(FileInfo file in Files ) { //Do Something } 文件文件夹中有200多个文件。处理每个文件大约需要15分钟 我的问题是,我是否可以使用并发/并行编程一次处理多于文件的数据 我想的是,开始一些线程?他们中的每一个人都会处理文

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

DirectoryInfo d = new DirectoryInfo(@"D:\Test");
FileInfo[] Files = d.GetFiles("*.txt"); 
foreach(FileInfo file in Files )
{
  //Do Something
}
文件文件夹中有200多个文件。处理每个文件大约需要15分钟

我的问题是,我是否可以使用并发/并行编程一次处理多于文件的数据

我想的是,开始一些线程?他们中的每一个人都会处理文件列表中的大约5个文件

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

如果这是可能的,我可以启动的线程数量是否有限制,或者是否有任何其他限制


将要做的工作是将每个文件的内容加载到一个通用列表中,对其进行处理,并在该列表中反复多次

这似乎是一项很好的工作。它将为您提供真正的并行化,因为它可以将每个迭代调度到不同的CPU核心

如果这是可能的,我可以启动多少线程有限制吗, 或任何其他限制


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

@Sayse它会将内容加载到通用列表中,对数据执行一些计算,并将结果写入文本文件。将为每个输入文件创建一个新的输出文件。这是并行任务的正确作业。这将取决于瓶颈所在的位置。例如,如果您正在最大化IO,更多的线程将减慢进程。@WDS,那么您的意思是这些任务可以同时执行,但IO容量有一个限制-因此我需要尽可能减少这种情况,例如写入和输出,是否按顺序进行?IO的近似限制是多少?每个文件大约有12000行,这是您所拥有的。我电脑上的IO实际上只有50 MB每秒,因为我有便宜的硬盘。RAID阵列将更快。但听起来IO并不是你的瓶颈——一个12000行的文件需要15分钟来处理,处理时间肯定比读/写时间要长,所以,是的,这听起来很可能是并行处理的候选者。
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;
        }