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 はひどく見えます: 冗長なコードがたくさんあり、不要なループがたくさんあります。コード レビューで質問を開いて、そのメソッドを投稿することを強くお勧めします。ところで、反復ごとにダウンロード コードを 2 回呼び出しています。

于 2012-08-15T12:56:52.357 に答える
1

ほんの少しの考え

request.Proxy1 - null に設定します。これは、スピードアップに役立つ場合があります。

2-文字列操作の代わりに関数Conditionsを使用HttpUtility.HtmlDecode

3- 文字列操作を使用して html を解析しないでください (GetProfileNamesや などGetTextFromProfile)。代わりに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 に答える