هي وحدة العمل أكثر كفاءة إذا كنت لا أهتم بالمعاملات وغيرها؟

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

  •  06-09-2019
  •  | 
  •  

سؤال

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

هل لأن إنشاء جلسة جديدة لكل مكالمة قاعدة البيانات مكلفة للغاية؟

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

المحلول

مع Nibernate، فإن إنشاء مصنع الجلسة مكلفة للغاية (لذلك سترغب في التخزين المؤقت في مصنع الجلسة بمجرد إنشاء، ربما على HttpApplication) ولكن إنشاء الجلسة رخيصة جدا. بمعنى آخر، إذا كان يحتفظ بأنظف الكود الخاص بك، فإن إبداعات جلسة متعددة ليست بالضرورة شيئا سيئا. أعتقد أن وثائق NH تقول إنها الأفضل:

IsessionFactory هو كائن باهظ الثمن، وكائن الفاتيح يهدف إلى مشاركتها من قبل جميع مؤشرات ترابط التطبيق. ISESOSE هو كائن غير مكلفة وغير مؤلفة من الخلافات التي يجب استخدامها مرة واحدة، لعملية عمل واحدة، ثم تم تجاهلها.

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

نصائح أخرى

نعم، يجب عليك استخدام المعاملة. من مدونة ayende:

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

لمزيد من التفاصيل، إليك رابط لنشر مدونته:

http://ayende.com/blog/archive/2008/12/28/nh-prof-alerts-use-of-implicit-transactions-is-discouraged.aspx.

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