用于下载页面的并行类

时间:2012-05-06 07:21:55

标签: c# download parallel-processing

我有一个带并行类的代码,可以从网上下载页面。由于我下载了大约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:pharsing(string html)和save()//保存到DB中 我怎么能平行做? 而且,如果我想让它运行后台我需要将它插入BackgroundWorker?

1 个答案:

答案 0 :(得分:3)

任务并行库(TPL,其中Parallel来自)模块是可行的方式 - 就像您已经在做的那样。但是,通过Parallel.ForEach使用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

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