Frage

Ich verwende die folgenden Zeilen von Code, um die Reaktion eines asynchronen HttpWebRequest zu lesen. Dies scheint die größte Menge an Zeit in einem bestimmten Betrieb verbracht werden. Gibt es etwas, ich kann hier optimieren?

System.Net.HttpWebResponse oResp =(System.Net.HttpWebResponse)oReq.EndGetResponse(oResult);
oResp = (HttpWebResponse)oReq.GetResponse();
StreamReader oStreamReader = new StreamReader(oResp.GetResponseStream());
string sResponse = oStreamReader.ReadToEnd();

... geht auf ein XmlDocument zu machen, append etwas mehr XML, um es, dann eine XSL-Transformation durchführen.

Erstellen der Anschlüsse:

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);
War es hilfreich?

Lösung

fand ich eine wesentliche Verbesserung der Regelung I wurde mit. Anstatt die Stream und ReadToEnd mit dem Strom in einen String zu bekommen, nur dann in ein XmlDocument zu konvertieren. Ich übersprang die Mitte des Menschen und den Strom direkt in ein XmlDocument umgewandelt.

Dies ließ mich mit einem anderen Problem aber ich musste die Eltern des XmlDocument ändern meine Xslt zu passen (es gibt sehr viele, und sie erwarten, dass alle, die die Struktur Ich hatte). Siehe Wie kann ich neues Wurzelelement zu einem C # XmlDocument hinzufügen ? für diese Lösung.

Das hat mir eine etwa 2/3 Abnahme der benötigten Zeit gegeben, um die Ergebnisse des Webservice Anrufs zu verarbeiten, und eine große Abnahme in der Menge des verwendeten Speichers. In der vorherigen Version war die Antwort xml in Speicher zwei verschiedenen Zeiten (vielleicht drei, wenn der Strom zählt)!

Darüber hinaus entfernt die zusätzlichen GetResponse schien zu helfen.

using (HttpWebResponse oResp = (HttpWebResponse)oReq.EndGetResponse(oResult))
{
oXml.Load(oResp.GetResponseStream());
XmlNode oApiResult = oXml.RemoveChild(oXml.DocumentElement);
oXml.LoadXml(sOtherXml);
oXml.DocumentElement.AppendChild(oApiResult);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top