سؤال

أنا جديد على SubSonic وLinq Stuff وأحاول اكتشاف الطريقة الأقصر والأفضل لاسترداد سجل واحد.

ما هي الطريقة الأخرى الأسرع وتتطلب تعليمات برمجية أقل للكتابة من هذه للحصول على سجل واحد؟

User user2 = DB.Select().From(User.Schema)
.Where(User.PasswordColumn).IsEqualTo(password)
.And(User.SINumberColumn).IsEqualTo(siNumber)
.ExecuteSingle<User>();

لقد استخدمت أداة AntsProfiler للتحقق، ويستغرق ذلك متوسط ​​29.12 مللي ثانية من وقت وحدة المعالجة المركزية - تم اختباره على مدى عشر عمليات تشغيل

حيث أن هذا يستغرق وقتا أطول

UserController uc = new UserController();
Query query = new Query("User");
query.WHERE(User.Columns.Password, password);
query.WHERE(User.Columns.SINumber, siNumber);   
User user = uc.FetchByQuery(query).First<User>();

يستغرق السطر الأخير فقط 256.08 مللي ثانية من وقت وحدة المعالجة المركزية بالإضافة إلى أن UserController يستغرق 66.86 مللي ثانية.

أي اقتراحات؟

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

المحلول

IIRC، كائن الاستعلام يجيد ..أي.

query.WHERE(User.Columns.Password, password);
query.WHERE(User.Columns.SINumber, siNumber);

ينبغي أن تقرأ على النحو التالي:

query = query.WHERE(User.Columns.Password, password);
query = query.WHERE(User.Columns.SINumber, siNumber);

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

نصائح أخرى

سيكون "عنق الزجاجة" هو الاستعلام الذي تم إنشاؤه والذي يتم تنفيذه، وليس SubSonic الذي يقوم بإنشائه أو إرجاع النتيجة.إذا كان استعلام معين بطيئًا، فيجب عليك التفكير في استخدام وظائف الفهرسة الخاصة بموفر قاعدة البيانات لديك لتحسينه.

في الحالة الثانية، أفترض أن وقت التنفيذ الإضافي يمثل حملًا إضافيًا لـ LINQ لإرجاع العنصر الأول من المجموعة.

لذا ستكون إجابتي، الطريقة الأولى هي أفضل طريقة للقيام بذلك، وإذا كانت 29 مللي ثانية غير مقبولة (والتي لا أعتقد أنها غير معقولة بالنسبة للاتصال بقاعدة البيانات)، أضف بعض الفهارس في قاعدة البيانات الخاصة بك لتسريع يصل الاسترجاع.

أعتقد أن جون على حق فيما يتعلق بالمال.إذا كنت تريد حقًا اختبار SubSonic لمعرفة مقدار الوقت الذي تستغرقه، فأنت بحاجة إلى اختبار المدة التي يستغرقها الصوت دون سرعة الصوت لإنشاء عبارة SQL وليس المدة التي يستغرقها SubSonic لإنشاء عبارة SQL والمدة التي تستغرقها قاعدة البيانات الخاصة بك لإرجاع النتائج في نفس الوقت (تحتاج إلى عزل اختباراتك).

ربما يجب عليك اختبار المدة التي يستغرقها الحصول على النتائج باستخدام أمر SQLCommand القديم العادي وتمرير اتصالك ومعلماتك ومعرفة الوقت الذي يستغرقه ذلك حتى تتمكن من إجراء مقارنة.

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