moduloObjectHashcode MDA

moduloObjectHashcodeمساعد تصحيح الأخطاء التي تتم إدارتها (MDA) تشغيل تغيير سلوك Objectفئة لتنفيذ modulo العملية تشغيل تجزئة التعليمات البرمجية التي تم إرجاعها بواسطة GetHashCodeالأسلوب. المعامل الافتراضية لهذا MDA هو 1، والذي يسبب GetHashCodeإلى بإرجاع 0 لكافة الكائنات.

الأعراض

بعد نقل إلى الإصدار جديد من وقت تشغيل اللغة العامة (CLR)، برنامج لا ينفذ بشكل صحيح:

  • يتم الحصول على البرنامج خاطئ كائن من Hashtable.

  • ترتيب التعداد من Hashtableعلى تغيير فواصل برنامج.

  • كائنين المستخدمة إلى تكون مساوية ولم تعد متساوية.

  • كائنين المستخدمة إلى عدم تساوي الآن متساوية.

السبب

البرنامج الخاص بك قد يكون تشغيل الكائن غير صحيح من Hashtableلأن التطبيق Equalsالأسلوب في الفئة الخاصة بالمفتاح في إلى Hashtableالاختبارات لمساواة الكائنات بمقارنة نتائج الاستدعاء إلى GetHashCodeالأسلوب. تجزئة يجب عدم استخدام رموز لاختبار مساواة كائن لأنه قد يكون كائنين لهما نفس تجزئة التعليمات البرمجية حتى ولو حقولها التابعون لها قيم مختلفة. هذه تجزئة عدد التضاربات تعليمات برمجية، بالرغم من أن نادرة في التدريب العملي، تحدث. تأثير هذا يحتوي تشغيل Hashtableهو بحث يظهر مفتاحين التي لا تساوي إلى تكون متساوية، ويتم إرجاع الكائن غير صحيح من Hashtable. لأسباب تتعلق بالأداء، تنفيذ GetHashCodeيمكن تغييرها بين إصدارات وقت التشغيل، لذلك قد يحدث فقد لا تحدث تشغيل وجه واحد عدد التضاربات في الإصدارات اللاحقة. قم بتمكين هذا MDA لاختبار ما إذا كان يحتوي على تعليمات برمجية الخاصة بك الأخطاء عند collide رموز التجزئة. عند ممكّن، يتسبب هذا MDA GetHashCodeالأسلوب لإرجاع صفر، مما يؤدي إلى الجميع رموز تجزئة colliding. التأثير الوحيد تمكين th MDA هو ينبغي على البرنامج هو أن البرنامج يعمل بسرعة أقل.

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

الدقة

لا تستخدم تجزئة رموز كبديل لهوية الكائن. قم بتطبيق اليمنع Object.Equalsأسلوب إلى غير يقارن تجزئة رموز.

لا تقم بإنشاء تبعيات في ترتيب عمليات التعداد مفاتيح أو قيم في تجزئة الجداول.

التأثير تشغيل وقت التشغيل

تشغيل تطبيقات أبطأ عندما th هو MDA هو ممكنة. يأخذ هذا MDA ببساطة تجزئة التعليمات البرمجية التي سيتم إرجاعها وبدلاً من إرجاع الباقي عند مقسومة القيمة المطلقة.

الإخراج

هناك هو لا إخراج th هو MDA.

التكوين

modulusتحدد سمة القيمة المطلقة المستخدمة تشغيل رمز التجزئة. وتكون القيمة الافتراضية هي 1.

<mdaConfig>
  <assistants>
    <moduloObjectHashcode modulus="1" />
  </assistants>
</mdaConfig>

راجع أيضًا:

المرجع

Object.GetHashCode

Object.Equals

المبادئ

تشخيص الأخطاء مع المساعدين التصحيح مدارة