用于下载页面的并行类

本文关键字:并行 下载 用于 | 更新日期: 2023-09-27 18:33:16

我有一个带有并行类的代码,可以从网络下载页面。由于我下载了大约 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 个函数:pharsing(字符串 html) 和 save()//Save 到 DB我怎样才能通过并行来做到这一点?而且,如果我希望它在后台运行,我需要将其插入后台工作者?

用于下载页面的并行类

任务并行库(TPL,Parallel的来源)模块是要走的路 - 就像你已经在做的那样。但是,您可以通过在Parallel.For上使用Parallel.ForEach使事情更清晰:

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

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