2015-10-15 53 views
0

我有下面的C#代码: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我的电脑的许多并发情况下,可以在同一时间

+1

你正在寻找的是可能的,但你不会得到任何因为您的硬盘不能同时读取多个扇区,所以可以从中受益。如果你有ssd,你可能会从中受益。 –

+0

@ M.kazem Akhgary:我们无法从问题中判断'perFile'方法是否是磁盘绑定的。 (显然有一定数量的磁盘I/O发生,但不可能知道这是否是瓶颈。) – LukeH

回答

2

您可以使用Parallel.For做你需要的,如果你使用.NET 4.5及以上版本,您可以控制多少线程提供了一个ParallelOptionsMaxDegreeOfParalleism设置为你喜欢的号码使用。

示例代码:

ParallelOptions POptions = new ParallelOptions(); 
POptions.MaxDegreeOfParalleism = ReplaceThisWithSomeNumber; 

Parallel.For(0,files.Length,POptions,(x) => {perFile(files[x]);}); 

请注意,你的程序将被IO约束,但(有关如何解决更多的信息,请阅读Asynchronous IO