优化多个网页的下载.C#

Aut*_*ico 5 c# optimization http

我正在开发一个应用程序,我需要下载一堆网页,最好尽快.我现在这样做的方式是我有多个拥有自己的线程(100)System.Net.HttpWebRequest.这种作品,但我没有得到我想要的表现.目前我有600+ Mb/s的强大连接,而且最多只能使用10%(峰值).我想我的策略存在缺陷,但我无法找到其他任何好办法.

另外:如果使用HttpWebRequest不是下载网页的好方法,请说明:)代码已经从java半自动转换.

谢谢 :)

更新:

public String getPage(String link){
   myURL = new System.Uri(link);
   myHttpConn = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(myURL);
   myStreamReader = new System.IO.StreamReader(new System.IO.StreamReader(myHttpConn.GetResponse().GetResponseStream(),
            System.Text.Encoding.Default).BaseStream,
                new System.IO.StreamReader(myHttpConn.GetResponse().GetResponseStream(),
                    System.Text.Encoding.Default).CurrentEncoding);

        System.Text.StringBuilder buffer = new System.Text.StringBuilder();

        //myLineBuff is a String
        while ((myLineBuff = myStreamReader.ReadLine()) != null)
        {
            buffer.Append(myLineBuff);
        }
   return buffer.toString();
}
Run Code Online (Sandbox Code Playgroud)

Jim*_*hel 2

一个问题是您似乎对每个请求发出了两次:

myStreamReader = new System.IO.StreamReader(
    new System.IO.StreamReader(
        myHttpConn.GetResponse().GetResponseStream(),
        System.Text.Encoding.Default).BaseStream,
             new System.IO.StreamReader(myHttpConn.GetResponse().GetResponseStream(),
                 System.Text.Encoding.Default).CurrentEncoding);
Run Code Online (Sandbox Code Playgroud)

它对 进行两次调用GetResponse。由于我无法理解的原因,您还创建了两个流读取器。您可以将其拆分并简化,并且还可以更好地处理错误......

var response = (HttpWebResponse)myHttpCon.GetResponse();
myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.Default)
Run Code Online (Sandbox Code Playgroud)

这将使您的有效吞吐量增加一倍。

另外,您可能需要确保处理掉您正在使用的物品。当您下载大量页面时,如果您不自行清理,您可能很快就会耗尽资源。在这种情况下,您应该致电response.Close(). 请参阅http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.close.aspx