3

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()//DB に保存 並列で実行するにはどうすればよいですか?? そして、バックグラウンドで実行したい場合は、BackgroundWorker に挿入する必要がありますか?

4

1 に答える 1

3

Task Parallel Library (TPL、どこParallelから来たのか) モジュールは、あなたがすでに行っているように、進むべき道です。Parallel.ForEachただし、 overを使用すると、物事をより明確にすることができます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

これは有用な読み物ですが、この時点でコードはパフォーマンスと読みやすさの適切なバランスになっていると思います。

于 2012-05-06T07:31:54.723 に答える