我有一个带有并行类的代码可以从 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 个函数:pharsing(string html) 和 save()//保存到数据库中 我怎样才能通过并行来做到这一点? 而且,如果我想让它在后台运行,我需要将它插入到 BackgroundWorker 中吗?
最佳答案
Task Parallel Library(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
这是一本有用的读物,但我认为此时的代码在性能和可读性之间取得了适当的平衡。
关于c# - 下载页面的并行类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10468891/