有许多问题和答案显示如何从URL获取HTML内容,但我需要一个非常快速的算法,因为我们有很多Web连接要做。
那么从URL获取内容(通常是HTML)的最有效方法是什么?
答案 0 :(得分:2)
WebClient可能有一个更简单的api,但两者都应该有用。
就运行大量请求而言,您应该使用多个线程或线程池来实现它。如果网址在同一台服务器上,则应注意不要超载。
如果你想通过线程池实现它的例子,我可以提供它们。
更新
using System;
using System.Threading;
using System.Collections.Generic;
using System.Net;
using System.IO;
namespace WebClientApp
{
class MainClassApp
{
private static int requests = 0;
private static object requests_lock = new object();
public static void Main() {
List<string> urls = new List<string> { "http://www.google.com", "http://www.slashdot.org"};
foreach(var url in urls) {
ThreadPool.QueueUserWorkItem(GetUrl, url);
}
int cur_req = 0;
while(cur_req<urls.Count) {
lock(requests_lock) {
cur_req = requests;
}
Thread.Sleep(1000);
}
Console.WriteLine("Done");
}
private static void GetUrl(Object the_url) {
string url = (string)the_url;
WebClient client = new WebClient();
Stream data = client.OpenRead (url);
StreamReader reader = new StreamReader(data);
string html = reader.ReadToEnd ();
/// Do something with html
Console.WriteLine(html);
lock(requests_lock) {
requests++;
}
}
}
}
答案 1 :(得分:1)
使用Parallel.Invoke
设置所有请求并为其提供慷慨MaxDegreesOfParallelism
。
您将花费大部分时间等待I / O,因此尽可能多地使用多线程。