قيم مختلفة من GetHashCode على inproc و stateserver متغيرات جلسة العمل

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

  •  01-07-2019
  •  | 
  •  

سؤال

لقد قمت مؤخرا ورثت تطبيق يجعل ثقيلة جدا استخدام الدورة ، بما في ذلك تخزين الكثير من البيانات المخصصة الكائنات في الدورة.واحدة من أول نقطة من العمل مع هذا التطبيق كان على الأقل تحريك الدورة البيانات بعيدا عن InProc خارج تحميله إما stateserver أو SQL Server.

بعد أن قدم كل من المناسب كائنات بيانات تسلسل و غيرت شبكة الإنترنت.التكوين استخدام خدمة الدولة ، كل شيء يبدو للعمل بشكل جيد.

ومع ذلك ، وجدت أن هذا التطبيق لديه الكثير من وجوه مقارنات باستخدام GetHashCode().الأساليب التي عملت بشكل جيد عندما تكون الدورة InProc لم تعد تعمل بسبب HashCodes لم تعد تتطابق عندما يكون من المفترض أن.يبدو أن هذا هو الحال عندما تحاول العثور على طفل بعينه كائن من الأم عندما تعلم الطفل الكائن الأصلي رمز التجزئة

إذا كنت ببساطة تغيير شبكة الإنترنت.التكوين مرة أخرى إلى استخدام inproc, يعمل مرة أخرى.

أي شخص لديه أي فكرة من أين تبدأ مع هذا ؟


تحرير:

qbeuek:شكرا على الرد السريع.في ما يخص:

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

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

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

المحلول

عندما تكتب

يفعل الكثير من وجوه مقارنات باستخدام GetHashCode()

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

عندما اثنين من وجوه هي نفسها (يساوي الأسلوب بإرجاع true) ، يجب أن لها نفس القيمة التي تم إرجاعها من الوقت.عندما اثنين من الكائنات لها نفس قيمة التجزئة ، فإنها يمكن يكون نفس الكائن (يساوي بإرجاع true) أو كائنات مختلفة (يساوي بإرجاع false).

لا توجد ضمانات أخرى على نتيجة GetHashCode.

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

نصائح أخرى

تجاوز GetHashCode الأسلوب في الطبقات أن يطلق على هذا الأسلوب وحساب رمز التجزئة على أساس فريدة من نوعها خصائص الكائن (مثل الهوية أو كل حقول كائن).

الحل 1:إنشاء معرف فريد لكل طفل الكائنات واستخدامها بدلا من رمز التجزئة.

الحل 2:محل if (a.GetHashCode() == ب.GetHashCode()) إذا كان (a.يساوي(ب)).

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