有没有更快的方式从网站下载内容?

时间:2012-08-15 12:50:26

标签: c#

这是我现在的代码:

private string downloadContent() 
        {
            try
            {
                WebRequest request = WebRequest.Create(url);
                request.Method = "GET";
                response = request.GetResponse();
                Stream stream = response.GetResponseStream();
                reader = new StreamReader(stream);
                string content = reader.ReadToEnd();
                return content;
            }
            catch
            {
                return error;
            }
        }

这是网站:

http://chatroll.com/testings

当我在聊天中写一些内容时,我就这样做,这样每隔n秒它就会显示我在程序textBox1中写的内容,并将其写在我硬盘上的文本文件记录器上。

问题是有时候如果我在聊天中输入的东西非常快(例如:你好(输入),嗨(输入),丹尼尔(输入))有时你好我的程序中不会显示你好。我认为我输入内容的内容读写速度不够快。

有没有更快的方式来下载页面源并处理它?也许我下载它的方式不是那么快?

你可以在这里看到我的项目:

https://skydrive.live.com/redir?resid=3B8A7D9F66FF985B!171&authkey=!AFO6EmoF38MtkKQ

2 个答案:

答案 0 :(得分:6)

为什么不使用更高级别的WebClient?我不知道它是否更快,但至少它更不容易出错。您需要注意using语句以释放任何资源(套接字等)。

using (var downloader = new WebClient())
{
    string result = downloader.DownloadString(url);
} 

关于性能的编辑:如果Web服务器支持GZIP等压缩,您可能想要使用它:

  1. 设置header

    downloader.Headers["Accept-Encoding"] = "gzip";
    
  2. 使用WebClient.DownloadData将压缩的响应加载到byte[]

  3. 使用GZipStream
  4. 对其进行解压缩

    另一个编辑:你的BackgroundWorker.DoWork看起来很糟糕:你有很多冗余代码,大量不必要的循环等等。我强烈建议你在Code Review打开一个问题,发布那个方法。 顺便说一句,你在每次迭代时都会调用你的下载代码两次

答案 1 :(得分:1)

只是一些想法

1-将request.Proxy设为null。这可能有助于加速。

2-在函数Conditions中使用HttpUtility.HtmlDecode而不是字符串操作

3-不要使用字符串操作来解析html(例如GetProfileNamesGetTextFromProfile)。请改用HtmlAgilityPack。例如:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(page);
var text = doc.DocumentNode.Descendants("img")
    .Where(x => x.Attributes["class"].Value="????????")
    .Select(x=>x.InnerText)
    .ToArray();