我发现我使用的方案有一个重大改进。而不是使用streamreader和readtoend将流转换为字符串,然后将其转换为XML文档。我跳过了中间人,将流直接转换为XML文档。
但是,这给我带来了另一个问题,我必须更改XML文档的父级以适应我的XSLT(有很多,它们都期望我拥有的结构)。见
How can I add new root element to a C# XmlDocument?
为了解决这个问题。
这使我在处理WebService调用结果所用的时间大约减少了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);
}