2012-04-17 10 views
0

私は映画に関する情報を得るためにAPIを使用しようとしています。 私はthis APIを実際に使用しています。WebResponse slow

唯一のことは、それを高速化する方法があれば、遅くて驚いていますか?私は、これは私にとってはむしろ新しいことだと言わなければならない。ここにソムのコードがあります。

public string Connect() 
    { 
     WebRequest request = WebRequest.Create(this.url); 
     request.ContentType = "application/json; charset=utf-8"; 

     //this is slowing me down 
     WebResponse response = (HttpWebResponse)request.GetResponse(); 

     using (StreamReader sr = new StreamReader(response.GetResponseStream())) 
     { 
      jsonString = sr.ReadToEnd(); 
     } 
     return jsonString; 
    } 

    public static string GetFilmInfo(string titel) 
    { 
     MakeCon checkVat = new MakeCon("http://www.imdbapi.com/?i=&t=red" + titel + "/"); 
     JsonSerializer serializer = new JsonSerializer(); 
     string jsonString = checkVat.Connect(); 
     return JsonConvert.DeserializeObject<string>(jsonString); 
    } 

答えて

0

あなたができることは、WebRequest.GetResponse呼び出しの非同期バージョン、つまりWebRequest.BeginGetResponse/EndGetResponseを使用して、複数のリクエストを同時に実行することです。ここでは簡単な例です:

static void Main(string[] args) 
    { 
     RequestByTitle("Mission Impossible"); 
     RequestByTitle("Mission Impossible 2"); 
     RequestByTitle("Mission Impossible 3"); 
     RequestByTitle("The Shawshank Redemption"); 

     Console.ReadLine(); 
    } 

    private const String IMDBApiUrlFormatByTitle = 
     "http://www.imdbapi.com/?t={0}"; 

    private static void RequestByTitle(String title) 
    { 
     String url = String.Format(IMDBApiUrlFormatByTitle, title); 
     MakeRequest(url); 
    } 

    private static void MakeRequest(String url) 
    { 
     HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url); 
     req.ServicePoint.ConnectionLimit = 10; 

     req.BeginGetResponse(GetResponseCallback, req); 
    } 

    private static void GetResponseCallback(IAsyncResult ar) 
    { 
     HttpWebRequest req = ar.AsyncState as HttpWebRequest; 
     String result; 
     using (WebResponse resp = req.EndGetResponse(ar)) 
     { 
      using (StreamReader reader = new StreamReader(
       resp.GetResponseStream()) 
       ) 
      { 
       result = reader.ReadToEnd(); 
      } 
     } 

     Console.WriteLine(result); 
    } 

注ライン:

req.ServicePoint.ConnectionLimit = 10; 

それは(詳細はthis postを参照してください)同じサービスエンドポイントに2つの以上の同時要求を作成することができます。また、(IMDB apiサービスがあれば)使用期間に違反しないように注意深く番号を選択する必要があります。

2

私はあなたのサービスがIMDB API検索の速度よりも速く実行することができます怖い、プラスあなたとIMDBサービスとの間の帯域幅に関連したいくつかのオーバーヘッドは、HttpWebRequestの呼び出しに小さなオーバーヘッドをぬいぐるみ.GetResponse。

サービスをスピードアップできる唯一の方法は、おそらくそれがimdbと同じ建物内にホストされていることでしょう。