سؤال

أنا أستخدم الأسطر التالية من التعليمات البرمجية لقراءة استجابة HttpBeBRequest غير متزامنة. يبدو أن هذا هو أكبر وقت يقضيه في عملية معينة. هل هناك أي شيء يمكنني تحسينه هنا؟

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

... يستغرق لجعل xmldocument، إلحاق بعض 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 والتأكيد للحصول على الدفق في سلسلة، فقط عند تحويله إلى XMLDocument. تخطيت الرجل الأوسط وتحويل الدفق مباشرة إلى xmldocument.

تركني هذا مع مشكلة أخرى، اضطررت لتغيير الأصل XMLDOCMENT لتناسب XSLT الخاص بي (هناك الكثير منها وكثيرا يتوقعون جميع الهيكل الذي أجريته). يرى كيف يمكنني إضافة عنصر جذر جديد إلى C # XMLDocument؟ لهذا الإصلاح.

لقد منحني هذا انخفاضا تقريبا 2/3 في الوقت المستغرق لمعالجة نتائج مكالمة WebService، وانخفاض كبير في كمية الذاكرة المستخدمة. في الإصدار السابق، كان الاستجابة 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