我有以下C#代码:
string[] files = Directory.GetFiles(@"C:\Users\Documents\DailyData", "*.txt", SearchOption.AllDirectories);
for (int ii = 0; ii < files.Length; ii++)
{
perFile(files[ii]);
}
每个文件打开每个文件并创建一系列通用列表,然后将结果写入文件。
每次迭代大约需要15分钟。
我希望perFile
方法同时执行,例如在开始下一个迭代之前不等待当前迭代完成。
我的问题是:
我该怎么做?
如何控制perFile
并发运行的实例数
如何确定我的计算机一次可以处理的perFile
个并发实例数
答案 0 :(得分:3)
尝试使用Parallel.ForEach。您可以使用ParallelOptions.MaxDegreeOfParallelism属性设置运行perFile
的最大数量。
答案 1 :(得分:2)
如果您正在使用.Net 4.5及更高版本,则可以使用Parallel.For执行所需操作。您可以通过ParallelOptions
提供MaxDegreeOfParalleism
来控制要使用的线程数设置为你喜欢的数字。
示例代码:
ParallelOptions POptions = new ParallelOptions();
POptions.MaxDegreeOfParalleism = ReplaceThisWithSomeNumber;
Parallel.For(0,files.Length,POptions,(x) => {perFile(files[x]);});
请注意,您的程序将受IO限制(阅读Asynchronous IO以获取有关如何解决该问题的更多信息)