3

我有一个带有并行类的代码来从网上下载页面。因为我下载了大约 3000 页,所以我想知道它是否是最好的方法。

Parallel.For(0, 3000, i =>
            {
                Console.WriteLine(i.ToString());
                //HttpDownloader is my class for downloading
                HttpDownloader ht = new HttpDownloader(s[i]);
                string a = ht.GetPage();
                Console.WriteLine(i.ToString());
            }); 

之后我运行 2 func: phasing(string html) and save()//Save into DB 我如何通过 Parallel 来实现?而且,如果我想让它在后台运行,我需要将它插入到 BackgroundWorker 中吗?

4

1 回答 1

3

任务并行库(TPL,Parallel来自哪里)模块是要走的路——就像你已经在做的那样。但是,您可以使用Parallel.ForEachover使事情更清楚Parallel.For

var urls = new List<string> { "http://google.com", "http://yahoo.com" };

Parallel.ForEach(urls, url => {
    using (var client = new WebClient())
    {
        var contents = client.DownloadString(url);
        // parse contents
        // add to database
    }
});

进一步阅读,特别是展示如何使用异步模式来节省线程(但不一定是速度)在这里:http: //blogs.msdn.com/b/pfxteam/archive/2009/08/04/9857477。 aspx

这是一个有用的阅读,但我认为代码在这一点上是性能和可读性的正确平衡。

于 2012-05-06T07:31:54.723 回答