我有一个带并行类的代码,可以从网上下载页面。由于我下载了大约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?
答案 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
这是一个有用的阅读,但我认为代码在这一点上是性能和可读性的正确平衡。