用于下载页面的并行类
本文关键字:并行 下载 用于 | 更新日期: 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
这是一个有用的阅读,但我认为代码在这一点上是性能和可读性的正确平衡。