كم مرة للاتصال datacontext.submitchanges () لعدد كبير من الإدراج؟

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

سؤال

كم العدد InsertOnSubmit هل يجب أن أتصل قبل الاتصال SubmitChanges؟ أقوم بإضافة بيانات من خدمة ويب يمكنها إرجاع عشرات الآلاف من السجلات سجل واحد في كل مرة. تعرض فئة Wrapper حول خدمة الويب السجلات A IEnumberable جمع لإخفاء آلية تقطيع معقدة.

هل هناك إرشادات حول عدد الإدراج الذي يجب أن أتراكمه قبل تقديمها؟

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

المحلول

يعتمد ذلك أيضًا على نوع البيانات التي تحتاج إلى إدراجها. في بعض الأحيان ، أحتاج إلى إدراج الكثير من السجلات ، حيث أحتاج أيضًا إلى معرف ، لإدراج المزيد من السجلات في جدول آخر.

نظرًا لأن المعرف يتم تعيينه عند إرسال التغييرات إلى قاعدة البيانات ، فأنا بحاجة إلى الاتصال بـ Submitchanges في أوقات محددة.

عندما لا تكون هناك حاجة إليها ، أقوم فقط بإرسالها بـ 1000 مرة واحدة أو نحو ذلك (اعتمادًا على إجمالي عدد السجلات التي أحتاج إلى إدراجها).

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

نصائح أخرى

حسنًا ، لقد فعلت ذلك مع مئات الآلاف من السجلات عبر جداول متعددة في واحدة لا تزال دون مشكلة. في الواقع ، في حين أن استدعاء Submitchanges () لكل إدراج insertonsubmit () في حالة كهذه من شأنه أن يسوع ، فقط استدعاء subchanges () مباشرة في النهاية سيقلل الوقت لإدراج العديد من السجلات إلى بضع دقائق.

في الحالة التي وصفتها أعلاه ، كان الترتيب الذي أجريته هو الإبلاغ عن الجداول بجدول رأس ، وجدول تفاصيل (يرتبط برأس) وجدول ذرة (يرتبط بالتفاصيل). بالنسبة لكل سجل رأس ، كان لديّ جداول تفاصيل متعددة والتي سيتم ربطها مرة أخرى بسجلات Atom المتعددة. في بعض الحالات ، انتهى بي الأمر إلى إدراج Gazillions من السجلات ولم يواجهوا جميعًا أي مشاكل مع استدعاء Submitchanges () في النهاية وأداء كل شيء بشكل جيد للغاية.

لإجراء تغييرات على حقل واحد لسجل 1000 في الدفعة مقابل 1 في وقت واحد: 1 سجل في كل مرة يستغرق 0.1989 ثانية/سجل مقابل الدفعة التي تستغرق 0.0711 ثانية/السجل. لذلك الدفعة حوالي 3x بالسرعة في اختباراتي. لاحظ أن أحجام الدُفعات تختلف في الكفاءة.

Submitchanges () 1 سجل في وقت واحد
السجلات SEC/RECORD
1000 198.95 0.1989

الدُفعات الفرعية ()
سجلات SEC/RECORD ٪ تغيير
100 12.20 0.1220 133%
200 18.33 0.0916 122%
500 37.59 0.0752 106%
1,000 71.07 0.0711 103%
2,000 138.64 0.0693 102%
10,000 680.36 0.0680

لا يوجد حقًا أي "إرشادات" لكل سي. سيقول ID عن الكفاءة التي تريد جمعها ، ربما ليس 10 آلاف ، ولكن قل 100؟ هذا من شأنه أن يقلل بشكل كبير من استعلامات DB الخاصة بك ويجب ألا تأكل الكثير من ذاكرة الوصول العشوائي التي تختتمها محليًا أثناء قيامك ببناء معاملة.

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

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