2017-10-04 17 views
0

私はウェブサイトのコンテンツをダウンロードするためのデスクトップアプリケーションを持っています。StreamReaderを使用してC#のダウンロードが遅い

はもともと、これは次のコードではPythonで書かれています:

import requests 
from bs4 import BeautifulSoup 

def getSoup(url): 
    try: 
     r = requests.get(url) 
    except requests.exceptions.ConnectionError: 
     print "wrong" 
    soup = BeautifulSoup(r.text, "html.parser") 
    return soup 

は、それから私は、C#を使用して変更するには、次のよう、コードは次のとおりです。

public string getHtml(string theUrl) { 
    try { 
     string result = null; 
     WebRequest req = HttpWebRequest.Create(theUrl); 
     req.Method = "GET"; 
     req.Proxy = null; 
     using(StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream(), Encoding.UTF8) { 
      result = reader.ReadToEnd(); 
     } 
     return result; 
    } catch (Exception e) { 
     //handle exception 
    } 
} 

しかし、C#のコードはよりもはるかに遅いですPythonコード。多くの場合、C#コードには何の応答もありません。コードを速くするためにC#コードを改善する方法を提案できますか?

ありがとうございます。

+0

を試してみて、これらの転送はで処理されますはるかに低いレベル。 C#とPythonの大きな違いは、exeファイルをどこからも出さずに即座にネットワーク化することです。マルウェア対策製品を無効にして、もう一度お試しください。 –

+0

@HansPassantお返事ありがとうございます。私は、マルウェア対策製品をインストールしていません。 –

答えて

2

1)Wiresharkを使用して、実際にTCP通信を行っているかどうかを確認できます。 2)例外が検出されたかどうかを確認する必要があります。 3)は私のためにHttpWebRequestのではなくWebRequestクラスより

Whatvworksを使用すると、次のとおりです。

 try 
     { 

      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
      using (StreamWriter streamOut = new StreamWriter(request.GetRequestStream())) 
      { 
       streamOut.Write(yourMessage); 
      } 
      using (StreamReader streamIn = new StreamReader(request.GetResponse().GetResponseStream())) 
      { 
       Console.WriteLine(streamIn.ReadToEnd()); 
      } 
     } 
     catch (SystemException se) 
     { 
      Console.WriteLine(se.Message); 
     } 
+0

あなたの答えをありがとう。私はすでに起こっているかもしれない例外をキャッチしました。しかし、問題はいつかコードが速いが、いつかは遅い。しかし、私のPythonコードは常に私に応答を得ます。それがなぜ私には分かりません。 –

+0

'request.AutomaticDecompression = DecompressionMethods.GZip |のような圧縮ヘッダーを追加することで、わずかなパフォーマンスの向上が得られます。 DecompressionMethods.Deflate' – Dhejo

0

これはただのC#とは何の関係もありませんRestsharp

public string GetHtml(string theUrl) 
    { 
     var client = new RestClient(theUrl); 
     var request = new RestRequest(Method.GET); 
     request.AddHeader("postman-token", "c9d3ea79-0e8e-b377-a6c7-0042b1f82d51"); 
     request.AddHeader("cache-control", "no-cache"); 
     request.AddHeader("content-type", "application/x-www-form-urlencoded"); 
     request.AddParameter("application/x-www-form-urlencoded", "tokenDate=10%2F08%2F2017&enrollId=446", ParameterType.RequestBody); 
     IRestResponse response = client.Execute(request); 
     return response.Content; 
    } 
+0

このコードの機能を明確にしてください – IsuruAb

関連する問題