我使用的代码的以下各行读取的异步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);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top