2

这是我现在的代码:

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 中写的内容,并将其写在我硬盘上的文本文件记录器上。

问题是有时如果我在聊天中输入非常快的内容(例如:hello(enter)、Hi(enter)、Daniel(enter)),有时 Hi 不会在我的程序中显示。我认为我输入的内容阅读速度不够快。

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

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

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

4

2 回答 2

6

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

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

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

  1. 设置标题

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

  3. 使用解压GZipStream

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

于 2012-08-15T12:56:52.357 回答
1

只是一些想法

1-设置request.Proxy为空。这可能有助于加快速度。

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

3- 不要使用字符串操作来解析 html(如 inGetProfileNamesGetTextFromProfile)。请改用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();
于 2012-08-15T13:33:49.380 回答