سؤال

أنا أعمل على برنامج .NET ينفذ البرامج النصية التعسفية مقابل قاعدة بيانات.

عندما بدأ زميل في كتابة رمز الوصول إلى قاعدة البيانات ، قام ببساطة بعرض كائن أمر واحد إلى بقية التطبيق الذي يتم إعادة استخدامه (الإعداد CommandText/Type, ، الدعوة ExecuteNonQuery() وما إلى ذلك) لكل عبارة.

أتصور أن هذا هو أداء كبير لبيانات متكررة متكررة ، لأنها يتم تحليلها من جديد في كل مرة.

ما أتساءل عنه ، على الرغم من ذلك ، هو: هل سيؤدي ذلك أيضًا إلى تدهور سرعة التنفيذ إذا كان كل عبارة تختلف عن الإلغاء السابق (ليس فقط المعلمات المختلفة ، ولكن عبارة مختلفة تمامًا)؟ لم أستطع بسهولة العثور على إجابة على ذلك في الوثائق.

راجع للشغل ، فإن RDBMS المستخدمة هو Oracle ، لكنني أعتقد أن هذا السؤال ليس قاعدة بيانات محددة حقًا.

ملاحظة: أعلم أن تعريض الشيء نفسه Command الكائن ليس آمنًا لخيط الخيط ، لكن هذه ليست مشكلة هنا.

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

المحلول

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

نصائح أخرى

عادةً ما يأتي ضرب الأداء من إنشاء اتصال بقاعدة البيانات ، لكن ADO.NET ينشئ مجموعة اتصال للمساعدة هنا.

إذا كنت ترغب في تجنب تحليل العبارات في كل مرة من جديد ، فيمكنك وضعها في إجراءات مخزنة.

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

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