【发布时间】:2015-10-15 06:55:53
【问题描述】:
我有以下(简化的)控制台应用程序:
DirectoryInfo d = new DirectoryInfo(@"D:\Test");
FileInfo[] Files = d.GetFiles("*.txt");
foreach(FileInfo file in Files )
{
//Do Something
}
文件夹中有 200 多个文件。每个文件的处理大约需要 15 分钟。
我的问题是,我是否可以使用并发/并行编程一次处理多个文件?
我在想的事情是,启动多个线程?并且他们每个人都会处理文件列表中每5个左右的文件。
所有文件处理都是完全独立的,所以没有竞争条件的风险。
如果可能的话,我可以启动的线程数是否有限制,或任何其他限制。
将要做的工作是将每个文件的内容加载到一个通用列表中,对其进行处理并多次迭代该列表
【问题讨论】:
-
@Sayse 它将内容加载到通用列表中,对数据执行一些计算并将结果写入文本文件。将为每个输入文件创建一个新的输出文件
-
这是并行任务的正确工作
-
这将取决于你的瓶颈在哪里。例如,如果您要最大化 IO,则更多线程会减慢进程。
-
@WDS 所以你的意思是这些任务可以同时执行,但是 IO 容量有限制 - 所以我需要尽量减少这个,例如尽可能少地写入和写入,按顺序? IO 的大概限制是多少?每个文件大约有 12000 行
-
取决于你有什么。由于我有便宜的硬盘,我电脑上的 IO 实际上可能只有每秒 50 MB。 RAID 阵列会快得多。但听起来 IO 不是你的情况的瓶颈——一个需要 15 分钟处理的 12000 行文件必须在处理中花费比读/写更多的时间,所以是的,这听起来可能是并行的候选者处理。
标签: c# multithreading concurrency