c#threading和foreach循环

时间:2014-05-31 02:07:53

标签: c# multithreading

我需要循环播放大量记录 对于粗略的数字,可以说100,000条记录

当我遍历这些记录时,我需要进行一些字符串操作并将该字符串保存到文本文件中。每条记录之间不共享数据,它们是数据的独立记录。

我想我可以通过使用多个线程更快地完成这项任务? 如果是这样我将如何进行此操作(使用代码示例)?

我在想我不希望同时运行无限数量的线程,所以有没有办法启动有限数量的线程(一次说10个线程),当1完成时再启动另一个线程直到全部100,000完成了?

1 个答案:

答案 0 :(得分:4)

如果您使用的是.Net 4或更高版本,则可以使用并行任务库。只需包含LINQ的using语句

using System.Linq;
using System.IO;

然后对每个使用并行。

Parallel.ForEach(this.CollectionOfStrings, str => 
{
    // Append to file, or write to a new file if you are not appending
    using (StreamWriter file = new StreamWriter(Path.Combine(somePath, str, ".txt"))) 
    {
        file.WriteLine(str);
    }   
});

它会并行写入每一行。如果你有100,000行,它将不会创建100,000个线程,库可以确定要创建的最佳线程数并尽可能地旋转它。