2016-01-28 6 views
5

私はOnvifカメラにアクセスしてそれを十分にコントロールできるアプリを作っています。しかし、これは私の最初の時間(またはまったく)このようなWeb要求を使用するすべてのアプリケーションを作るので、私はおそらくかなり基本的なテクニックを使用していると仮定します。 私は好奇心だコードの一部はこれです:コードは、しかし、私はそれに続くものは唯一の間に取るのに対し、最初の要求が完了するのに約400msのを取ることがわかってきましたWriteLineメソッドのステートメントを使用して、正常に動作WebRequestsのスピードアップ方法

 Uri uri = new Uri(
      String.Format("http://" + ipAddr + "/onvif/" + "{0}", Service)); 

     WebRequest request = WebRequest.Create((uri)); 
     request.Method = "POST"; 

     byte[] b = Encoding.ASCII.GetBytes(PostData); 
     request.ContentLength = b.Length; 
     //request.Timeout = 1000; 
     Stream stream = request.GetRequestStream(); 
     //Send Message 
     XmlDocument recData = new XmlDocument(); 
     try 
     { 
      using (stream = request.GetRequestStream()) 
      { 
       stream.Write(b, 0, b.Length); 
      } 
      //Store response 
      var response = (HttpWebResponse) request.GetResponse(); 
      if (response.GetResponseStream() != null) 
      { 
       string responsestring = new 
        StreamReader(response.GetResponseStream()) 
        .ReadToEnd(); 
       recData.LoadXml(responsestring); 
      } 
     } 
     catch (SystemException e) 
     { 
      MessageBox.Show(e.Message); 
     } 
     return recData; 
    } 

10〜20ms。最初のリクエストをスピードアップするためにできることはありますか?

+1

これは良いリンクです。 request.Proxyをnullに設定すると、最初のリクエストに役立ちます。 –

答えて

5

あなたはそれをうまくやっています。完了までに時間の差がある理由は、HTTP Keep-Aliveが原因である可能性があります。デフォルトでは、後続の要求に対して同じ接続が再利用されます。したがって、最初のリクエストで接続を確立する必要があります。これはおそらく時間がかかります。残りの要求は、すでに開いている同じ接続を使用します。

+1

これを確認するために、彼は 'request.KeepAlive = false'を設定し、何が起こるかを見ることができます。 –

+0

コメントのおかげで、プロキシをヌルに設定して数ミリ秒も切ったが、それはちょうどそれらのものの1つだと思う。 –

0

潜在的なネットワークおよびサーバーの問題とは別に、要求自体が重要です。要求のサイズを縮小するか、またはそれを分解し、ファイルを非同期にロードすることもできます。

Webサーバーは、単純な要求を完了するのに400msかかることはありません。

+0

リクエストはonvifの標準に従わなければなりません。ヘッダーの暗号化されたパスワードでかなりかさばります。 –

関連する問題