新StreamReader(webRsp.GetResponseStream())的高响应时间



我正在尝试从web url获得响应。

但是当我们给它施加一些负载时,比如说100个用户负载。这行代码运行得很慢。在阅读下面代码的响应后,我必须将myXML发送给调用函数以供某些使用。

using (StreamReader rspStr = new StreamReader(webRsp.GetResponseStream()))
{
     myXML = rspStr.ReadToEnd().Trim();
}

是否有办法获得良好的响应时间,即使投掷100或1000用户负载

我会尝试使用异步方法,只是为了避免在流打开或缓慢的网络等待时锁定执行,一切都在这里解释:

发出异步请求

片段:

 WebRequest wreq = WebRequest.Create(httpSite);
      // Create the state object.
      RequestState rs = new RequestState();
      // Put the request into the state object so it can be passed around.
      rs.Request = wreq;
      // Issue the async request.
      IAsyncResult r = (IAsyncResult) wreq.BeginGetResponse(
         new AsyncCallback(RespCallback), rs);
   private static void RespCallback(IAsyncResult ar)
   {
      // Get the RequestState object from the async result.
      RequestState rs = (RequestState) ar.AsyncState;
      // Get the WebRequest from RequestState.
      WebRequest req = rs.Request;
      // Call EndGetResponse, which produces the WebResponse object
      //  that came from the request issued above.
      WebResponse resp = req.EndGetResponse(ar);         
      //  Start reading data from the response stream.
      Stream ResponseStream = resp.GetResponseStream();
      // Store the response stream in RequestState to read 
      // the stream asynchronously.
      rs.ResponseStream = ResponseStream;
      //  Pass rs.BufferRead to BeginRead. Read data into rs.BufferRead
      IAsyncResult iarRead = ResponseStream.BeginRead(rs.BufferRead, 0, 
         BUFFER_SIZE, new AsyncCallback(ReadCallBack), rs); 
   }

   private static void ReadCallBack(IAsyncResult asyncResult)
   {
      // Get the RequestState object from AsyncResult.
      RequestState rs = (RequestState)asyncResult.AsyncState;
      // Retrieve the ResponseStream that was set in RespCallback. 
      Stream responseStream = rs.ResponseStream;
      // Read rs.BufferRead to verify that it contains data. 
      int read = responseStream.EndRead( asyncResult );
      if (read > 0)
      {
         // Prepare a Char array buffer for converting to Unicode.
         Char[] charBuffer = new Char[BUFFER_SIZE];
         // Convert byte stream to Char array and then to String.
         // len contains the number of characters converted to Unicode.
      int len = 
         rs.StreamDecode.GetChars(rs.BufferRead, 0, read, charBuffer, 0);
         String str = new String(charBuffer, 0, len);
         // Append the recently read data to the RequestData stringbuilder
         // object contained in RequestState.
         rs.RequestData.Append(
            Encoding.ASCII.GetString(rs.BufferRead, 0, read));         
         // Continue reading data until 
         // responseStream.EndRead returns –1.
         IAsyncResult ar = responseStream.BeginRead( 
            rs.BufferRead, 0, BUFFER_SIZE, 
            new AsyncCallback(ReadCallBack), rs);
      }
      else
      {
         if(rs.RequestData.Length>0)
         {
            //  Display data to the console.
            string strContent;                  
            strContent = rs.RequestData.ToString();
         }
         // Close down the response stream.
         responseStream.Close();         
         // Set the ManualResetEvent so the main thread can exit.
         allDone.Set();                           
      }
      return;
   }  

相关内容

  • 没有找到相关文章

最新更新