c# - 下载页面的并行类

标签 c# download parallel-processing

我有一个带有并行类的代码可以从 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/

相关文章:

java - 如果在 preparedstatement.execute() 期间互联网中断,则在 JDBC 上下载 blob 文件会导致内存泄漏

c# - OnClient Click 使用 Freetextbox 的 javascript

C#:DataTable逐行转换

c# - 两个timer_tick事件是否不能并行读取相同的数据但执行不同的任务?

php - 使用 htaccess 强制下载图像

c - 不建议使用以下指针。特别是有助于自动并行化

c# - 一个 DNN 模块中的异常阻止处理页面上的所有其他模块

javascript - 使用 jQuery 和 iFrame 下载大文件 - 需要文件就绪事件以便我可以隐藏加载 gif

r - 在 R 中并行化矢量化函数的最简单方法是什么?

c - OpenMP Parallel for 循环显示性能提升很小