优化HttpWebResponse - 的GetResponse
-
19-09-2019 - |
题
我使用的代码的以下各行读取的异步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();
...接着使一个如下,附加一些更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);
解决方案
我发现一个重大的改进,以我所用的方案。而不是使用的StreamReader和ReadToEnd的获得流成一个字符串,然后才将其转换成一个XmlDocument。我跳过中间人和直接转换的流成的XmlDocument。
这给我留下了另外一个问题,虽然,我不得不改变的XmlDocument的父,以适应我的XSLT(有许多伟大的,他们都期望结构我)。见如何添加新的根元素到C#的XmlDocument ?的该修补程序。
此给予我在处理该web服务调用的结果所花费的时间大致2/3降低,并且在所使用的内存量大幅降低。在以前的版本,响应XML是内存中的两个不同时间(也许三如果流计数)!
此外,除去额外的GetResponse似乎帮助。
using (HttpWebResponse oResp = (HttpWebResponse)oReq.EndGetResponse(oResult))
{
oXml.Load(oResp.GetResponseStream());
XmlNode oApiResult = oXml.RemoveChild(oXml.DocumentElement);
oXml.LoadXml(sOtherXml);
oXml.DocumentElement.AppendChild(oApiResult);
}
不隶属于 StackOverflow