لا LINQ To SQL توفير أوقات استجابة أسرع من استخدام ado.net و oledb?

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

سؤال

LINQ يبسط برمجة قواعد البيانات بلا شك, ولكن هل السلبي ؟ مضمنة SQL يتطلب التواصل مع قاعدة البيانات بطريقة معينة أن يفتح قاعدة البيانات إلى الحقن.مضمنة SQL كما يجب أن يكون بناء الجملة مؤكد لدينا خطة بناء ، ومن ثم تنفيذها ، والتي تأخذ الثمينة دورات.الإجراءات المخزنة كما تم الصخور الصلبة القياسية في قاعدة بيانات كبيرة برمجة التطبيقات.العديد من المبرمجين أعرف استخدام طبقة البيانات أن يبسط التنمية ، ومع ذلك ، ليس إلى حد ينق لا.هل حان الوقت للتخلي عن SP و تذهب LINQ?

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

المحلول

LINQ to SQL يقدم في الواقع مقلقة بعض مشاكل الأداء في قاعدة البيانات.أساسا ، فإنه يخلق متعددة تنفيذ الخطط على أساس طول المعلمة تستخدمه.لقد نشرت حول هذا الموضوع في حين يعود على بلدي بلوق LINQ to SQL قد يسبب مشاكل الأداء.

الآن, هو أن نقول أن ينق لا مكان ؟ بالكاد.LINQ بالتأكيد لديه مكان في تطوير أدوات مثل الإجراءات المخزنة.في نهاية المطاف كنت ترغب في استخدام الإجراءات المخزنة عند أداء على الإطلاق من الضروري استخدام أداة ORM في أي حالة أخرى.

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

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

نصائح أخرى

الخاص بك الفرضية الأساسية هي معيبة..

مضمنة SQL يتطلب التواصل مع قاعدة البيانات بطريقة معينة أن يفتح قاعدة البيانات إلى الحقن.

لا لا.بجد الترميز المستخدم إدخال القيم في عبارة SQL لا, ولكن يمكنك أن تفعل ذلك مع مخزن الإجراءات.

Parameterizing الاستفسارات الخاصة بك ضد هجمات حقن, ولكن مضمنة SQL يمكن parameterizing بنفس السهولة الإجراءات المخزنة.

مضمنة SQL كما يجب أن يكون بناء الجملة مؤكد لدينا خطة بنيت ثم أعدم.

كل Sql (واص و مضمنة) يجب أن يكون بناء الجملة فحص لديك خطة مبنية على المكالمة الأولى.بعد ذلك الدقيق نص طلب تنفيذ خطة المخزنة مؤقتا.إذا طلب آخر مع نفس النص (لا عد المعلمات) تلقي مؤقتا تنفيذ الخطة المستخدمة.

لذا ، إذا كنت من الصعب رمز القيم في SQL المضمنة النص لا تطابق ، وأنها سوف تضطر إلى إعادة تحليل الاستعلام.ومع ذلك ، إذا كنت تستخدم المعلمات نص الاستعلام ستكون مباراة, وسوف تحصل على ضرب مخبأ.في هذه الحالة, فإنه لا يهم إذا كان الاستعلام في SQL المضمنة أو SP.

وبعبارة أخرى, المشكلة الوحيدة مع مضمنة SQL هو أنه من السهل أن تفعل شيئا أن بطء و غير آمنة.ولكن جعل مضمنة SQL سريعة وآمنة يعد العمل باستخدام SP.

وهو ما يقودنا إلى LINQ التي دائما باستخدام المعلمات ، حتى لو كنت بجد رمز القيم في LINQ البيان ، مما يجعل "fast & secure" مضمنة SQL تافهة.

LINQ أيضا لديها ميزة على واص من وجود كافة التعليمات البرمجية الخاصة بك في مكان واحد بدلا من المتناثرة على جهازين مختلفين.

إذا كنت مهتما في القياس ، ريكو مارياني له ممتاز 5-الجزء الدراسة الذي يغطي الكمية والنوعية الخلافات.

قد يكون MS الرجل ، لكنه يعرف الأداء الجوز - معاييره هي شاملة و مدروسة.

هذا هو الأداء تديرها ماكسيميليان بيلر.ووفقا له, LINQ بكثير أبطأ بكثير.قرأت دراسة شاملة

مجرد التفكير في تغيير الأعمدة اسم - الآن تغيير (ن)SPs و (x)وجهات النظر.

القيام بكل ما هو غالي على قاعدة البيانات (مثل عمليات البحث والفرز الخ..) وأنك لن تلاحظ مشكلة.

أيضا إذا كنت ترغب في عرض شبكة كبيرة دون ترحيل ...ثم استخدام مجموعة - أن أحد أسرع.

ستاكوفيرفلوو يستخدم أيضا linq2sql - هل ترى مشكلة :) ?

استخدام ORM - انها وسيلة للذهاب في معظم التطبيقات.

PS:أيضا ، عن الصغير المعايير مثل ..دعونا اختيار 10.000 الصفوف مع ORM - لا تفعل ذلك.ليس هذا هو سبب استخدام ORM.إذا كنت ترغب في تحديد 10.000 الصفوف استخدام ADO.

ذلك يعتمد على ما تفعله.LINQ سيكون أقل كفاءة في البيانات الفعلية/مجموعة التلاعب من قاعدة البيانات.ولكن سوف يوفر الكثير في عدم الاضطرار إلى الاتصال بقاعدة البيانات عبر الشبكة.

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

ولكن إذا كنت أعود كبير نتيجة مجموعة من بعيد ديسيبل يمكن أن يعني كبير وقت الإرسال ، أو إذا كان حقا قصيرة الاستعلام ذلك لن يبرر النفقات العامة ، LINQ من المرجح أن يكون أفضل.

بسبب بنية LINQ to SQL, لا توجد وسيلة ممكنة يمكن أن يكون أسرع من استخدام SQL الخام ، أما الخاصة بك بشكل جيد استفسارات أو الإجراء المخزن.ما ينق يشتري لك ليس بسرعة ولكن من نوع والسلامة المنظمة ؛ باختصار معظم الفوائد التي ORMs عموما تمنح لك.

LINQ to SQL ليس عن السرعة عن بناء أكثر تستعصي على نظام البرمجيات.هو عن جميع الاشياء برامج مخصصة المهندسين والمهندسين المعماريين الرعاية حول أمور مثل فضفاضة اقتران طبقات

هذا لا يعني أنه لا يمكن بناء بعض unmaintainable رمز مع LINQ -- لا أحد يمنعك من اطلاق النار على نفسك في القدم ولكن-ولكن القيام به بشكل صحيح ، LINQ يمكن أن تساعد كثيرا.أنا لا أقول LINQ هو الرصاصة الفضية, ومع ذلك.أنه يحتوي على مجموعة من القضايا التي تجعل من الصعب استخدامها في العديد من المشاريع الحالات-وهذا هو السبب MS يقدم إطار الكيان (ADO.NET 3.0).بالطبع هذا ليس مثاليا نظرا الأخيرة EF التصويت بحجب الثقة.

هو LINQ to SQL أو حتى EF أفضل من الخام SQL ؟ أنا أقول مدوية الجحيم نعم.هل هناك حلول أخرى قد تعمل على نحو أفضل ؟ ربما.

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