لماذا أداء الكائن HttpWebRequest تحسين أثناء استخدام عازف الكمان؟

StackOverflow https://stackoverflow.com/questions/1022844

  •  06-07-2019
  •  | 
  •  

سؤال

وأنا الحصول على بعض السلوك الغريب للغاية مع HttpWebRequest آمل شخص يمكن أن تساعدني مع. لدي التطبيق وحدة التحكم التي تقوم ببعض أعمال التجميع من قبل باستخدام HttpWebRequest الكائن لاسترداد محتويات موقع الهدف. نظرا لطبيعة متطلبات التطبيق هو مؤشرات ومحاولات لجعل أي مكان ما بين 10 و 30 الاتصالات المتزامنة (لقد تم تجريب مجموعة من القيم). ويتمحور طلب ويب الفعلي كما يلي:

var req = (HttpWebRequest)WebRequest.Create(url);
WebResponse resp = req.GetResponse();
Stream s = resp.GetResponseStream();
var sr = new StreamReader(s, Encoding.ASCII);
string doc = sr.ReadToEnd();
sr.Close();
resp.Close();
return doc;

وعلى أي حال، فإن السلوك الغريب أنه في ظل الظروف العادية التطبيق يحقق نحو 120 طلبات في الدقيقة الواحدة ولكن إذا كنت تفتح عازف الكمان أنه يقفز إلى نحو 600. عن طريق مراقبة الموارد ويندوز 7 أستطيع أن أرى زيادة نشاط الشبكة وفقا لذلك. اتصالات TCP لعملية وحدة قائمة الآن عنوان بعيد باسم "الاسترجاع من IPv4" بدلا من عنوان IP الملقم الهدف (متوقع). لم يتساءل عن عدد أقصى من طلبات HTTP المتزامنة المسموح به من قبل الجهاز ولكن لا يبدو تغيير هذا في التسجيل لإحداث فرق.

ولذا فإن السؤال هو: ما هو حول تشغيل عازف الكمان الذي يزيد فجأة مرت خمسة أضعاف وكيف يمكنني تحقيق ذلك أصلا على الجهاز دون الحاجة إلى إطلاق أداة أخرى؟

وشكرا!

هل كانت مفيدة؟

المحلول

ويبدو لقد كنت الآن قادرا على الحصول على الإنتاجية وصولا (لمضاعفة أنني كنت تحصل مع عازف الكمان فتح في الواقع) من خلال وضع وصلات كحد أقصى في App.config:

<system.net>
  <connectionManagement>
    <add address="*" maxconnection="30" />
  </connectionManagement>
</system.net>

وسعيد جدا بالنتيجة ولكن ما زلت دهشت قليلا لماذا وجود عازف الكمان مفتوحة غيرت النتائج بشكل كبير جدا.

نصائح أخرى

وشيء واحد أنا لاحظت على الفور هو أنك لا تنفذ باستخدام كتل. يضيف عاملا العشوائية التي قد تكون مضروبة في عدد الطلبات، لذلك أقترح عليك إصلاح ما يلي:

var req = WebRequest.Create(url);
using (WebResponse resp = req.GetResponse())
{
    using (Stream s = resp.GetResponseStream())
    {
        using (var sr = new StreamReader(s, Encoding.ASCII))
        {
            return sr.ReadToEnd();
        }
    }
}

وبعد ذلك، لمعلوماتك، عازف الكمان بدور الوكيل. إذا تم تعيين وكيل الافتراضي لاستخدام برنامج نصي لإعداد تكوين الوكيل، ثم أتساءل عما إذا كان وجود عازف الكمان تشغيل قد لا تزيل الوقت اللازم للقيام الإعداد النصي. قد يحدث مرة واحدة فقط، وليس على كل طلب.

وكان لي مشكلة مماثلة ليدكم وأراد أن يشارك قرار بلدي.

وباختصار، كان لدي برنامج وحدة التحكم التي تم تقديم طلبات HTTP وشأنه، بعد 15 دقيقة أو نحو ذلك، المهلة. ومع ذلك، إذا كنت عازف الكمان ثم لم أكن مهلة من ذوي الخبرة، حتى بعد تشغيله لعدة أيام على التوالي.

وحاولت تعيين الخاصية maxconnections في App.config، ولكن ذلك لا يبدو للمساعدة على الإطلاق. ثم ذهبت في وكل إشارة إلى HttpWebRequest، HttpWebResponse، والكائنات تيار تستخدم لقراءة البيانات / الكتابة إلى هذه الكائنات ضمن باستخدام كتل.

وهذا <م> يبدو لفعلت الحيلة. لقد تم تشغيل ما يقرب من 24 ساعة الآن دون مهلة ودون عازف الكمان على التوالي.

والطريقة التي الاستعلام يسبب لإنشاء جلسة عمل جديدة لكل مكالمة، والذي هو في السماء، فإنه يمكن أن العابث يضيف جلسة على الاستفسارات الخاصة بك ....

والمحاولة

وخاصة ثابتة CookieContainer _cookieContainer = CookieContainer جديدة ()؛

و_httpWebRequest.CookieContainer = _cookieContainer. // مع إعادة تدوير cookiecontainer

وكان لدينا نفس القضية، وضع الخاص بك httpWebRequest.PreAuthenticate إلى true.

ويجب أن لا يكون استجابة 401 بعد الآن، لذلك عليك فتح أقل الاتصالات ...

وكان لي نفس المشكلة. أنا تحميل هذا: http://www.wowinterface.com/downloads/info13581-LeatrixLatencyFix.html وهذا هو السبب من أداء HttpWebRequest. عدلت TCPAckFrequency وتماما لخبط كل شيء. I إزالته والآن يعمل IT.

وبالنسبة لي، كنت وضع request.ProtocolVersion = HttpVersion.Version10;

والإعداد الافتراضي لهذا هو HttpVersion.Version11. عندما أضع هذا إلى الافتراضي طلباتي ذهبت أسرع دون العابث.

وآمل أن يساعد هذا شخص آخر، لقد استغرق مني كل صباح لهذا الرقم!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top