【发布时间】:2010-02-09 18:29:41
【问题描述】:
我正在使用以下代码行来读取异步 HttpWebRequest 的响应。这似乎是在特定操作中花费的最大时间。这里有什么可以优化的吗?
System.Net.HttpWebResponse oResp =(System.Net.HttpWebResponse)oReq.EndGetResponse(oResult);
oResp = (HttpWebResponse)oReq.GetResponse();
StreamReader oStreamReader = new StreamReader(oResp.GetResponseStream());
string sResponse = oStreamReader.ReadToEnd();
...继续创建一个 XmlDocument,向其中添加更多 XML,然后执行 XSL 转换。
创建连接:
HttpWebRequest oReq;
oReq = (HttpWebRequest)WebRequest.Create(sUrl + sQueryString);
oReq.ContentType = sContentType;
oReq.Method = "POST";
oReq.ContentLength = aBytes.Length;
Stream oStream = oReq.GetRequestStream();
oStream.Write(aBytes, 0, aBytes.Length);
oStream.Close();
AsyncState oState = new AsyncState(oReq);
return oReq.BeginGetResponse(fCallBack, oState);
【问题讨论】:
-
为了回答这个问题,您需要收集更多信息。延迟发生在客户端还是服务器上?您提到您需要创建一个 XML 文档 - 服务器是动态生成此文档,还是从磁盘提供文档?你是通过代理吗?你在使用身份验证吗?您是否使用 Tcp 保持活动连接?与此相关的是,这个请求是在循环中完成的,还是一个一次性的应用程序,只发出这个请求并结束?显示您如何创建请求的代码 sn-p。我们可以从那里走得更远..
-
另外,你为什么要调用 EndGetResponse() 再调用 GetResponse() ?这不是 API 的正确用法。
-
更多信息:服务器正在动态生成 xml。我不使用代理。调用经过身份验证。连接不保持活动状态。连接是一次性的,每次负载不超过一个连接。我已经在上面添加了请求的创建方式。
-
第一个问题的答案,看起来几乎所有时间都花在了字符串 sResponse = oStreamReader.ReadToEnd();行,因此在客户端上。
标签: optimization httpwebrequest httpwebresponse getresponse