C#-用于下载页面的并行类
作者:互联网
我有一个带有并行类的代码,可以从Web下载页面.由于我下载了约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)and save()//保存到数据库
我如何通过Parallel做到?
而且,如果我想让它运行后台,我需要将其插入BackgroundWorker吗?
解决方法:
就像您已经在做的那样,任务并行库(TPL,并行来自何处)模块是必经之路.但是,通过使用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
这是一本有用的文章,但我认为此时代码是性能和可读性之间的恰当平衡.
标签:download,parallel-processing,c 来源: https://codeday.me/bug/20191201/2080268.html