سؤال

أنا أكتب أ IHttpHandler وسأحتاج إلى تنفيذ أ IsReusable ملكية.عندما أنظر إلى وثائق MSDN انها تقول:

يحصل على قيمة تشير إلى ما إذا كان يمكن لطلب آخر استخدام مثيل IHttpHandler.

هذا ليس مفيدًا جدًا. في أي المواقف يجب أن أستخدم معالجًا قابلاً لإعادة الاستخدام وفي أي المواقف لا ينبغي إعادة استخدامه؟

أسئلة المتابعة:

  1. ما هو إعادة الاستخدام؟
  2. هل يمكنني الحفاظ على الحالة (أي؟متغيرات الفئة) متى Reusable = true??
هل كانت مفيدة؟

المحلول

تشير هذه الخاصية إلى ما إذا كان من الممكن معالجة طلبات متعددة باستخدام نفس مثيل IHttpHandler.بشكل افتراضي، في نهاية مسار الطلب، يتم تعيين كافة معالجات http التي تم وضعها في HandlerRecycleList الخاص بـ HttpApplication على قيمة خالية.إذا كان المعالج قابلاً لإعادة الاستخدام، فلن يتم تعيينه على قيمة فارغة وسيتم إعادة استخدام المثيل في الطلب التالي.

المكسب الرئيسي هو الأداء لأنه سيكون هناك عدد أقل من الكائنات لجمع البيانات المهملة.
أهم نقطة ألم بالنسبة للمعالج القابل لإعادة الاستخدام هي أنه يجب أن يكون آمنًا للخيط.وهذا ليس بالأمر الهين ويتطلب بعض الجهد.

أنا شخصياً أقترح عليك ترك السلوك الافتراضي (غير القابل لإعادة الاستخدام) إذا كنت تستخدم الموارد المُدارة فقط لأنه يجب على Garbage Collector التعامل معها بسهولة.عادة ما يكون مكاسب الأداء من المعالجات القابلة لإعادة الاستخدام ضئيلة مقارنة بمخاطر إدخال أخطاء ترابط يصعب العثور عليها.

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

نصائح أخرى

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

إليك سؤال يوضح ما يحدث عندما لا يتم استخدامه بشكل صحيح:

دفق الصور المستندة إلى البيانات باستخدام HttpHandler

إن إعادة تدوير المعالج أرخص من إعادة تدوير معالج جديد في كل مرة يأتي فيها طلب وسيقوم الخادم باستهلاك ذاكرة أقل، مما يسهل العمل الذي يتعين على GC القيام به.إذا كان المعالج في حالة لا يكون فيها التعامل مع طلب جديد مشكلة (أي.تمت إعادة تعيين أي حالة في مثيل المعالج), ، فيجب أن تكون مؤهلة على أنها قابلة لإعادة الاستخدام.

يحرر

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

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