質問

私は、非同期の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();

... XSL変換を実行し、その後、XmlDocumentオブジェクトを作成し、それにいくつかのより多くのXMLを追加することになります。

接続の作成:

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);
役に立ちましたか?

解決

私は私が使っていたスキームに一つの大きな改善を発見しました。むしろXmlDocumentオブジェクトに変換するだけにして、文字列にストリームを取得するためのStreamReaderとReadToEndを使用するよりも。私は真ん中の男をスキップし、XmlDocumentオブジェクトに直接ストリームを変換します。

これは私が私のXSLTに合わせて常にXmlDocumentの親を変更しなければならなかった、しかし別の問題で私を残し(が非常に多くあり、それらはすべて私が持っていた構造を期待します)。 はどのように私はC#のXmlDocumentに新しいルート要素を追加することができます参照してください。 ?その修正のためを。

これは私のWebサービス呼び出しの結果を処理するのに要する時間でおよそ2/3に減少し、メモリ使用量に大きな減少を与えています。 (ストリームがカウントしている場合は多分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