سؤال

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

  1. sqlDataReaderInstance.GetString(0);

  2. sqlDataReaderInstance[0];

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

المحلول

وسمعت الحصول على البيانات من سكلداتاريدر من خلال ترتيبي أسرع من خلال اسم العمود

يحصل كلا المثالين على البيانات من خلال الفهرس (ترتيبي) ، وليس اسم العمود:

الحصول على البيانات من خلال اسم العمود:

while(reader.Read())
{
    ...
    var value = reader["MyColumnName"];
    ...
}

من المحتمل أن يكون أبطأ من الحصول على البيانات من خلال الفهرس:

int myColumnIndex = reader.GetOrdinal("MyColumnName");
while(reader.Read())
{
    ...
    var value = reader[myColumnIndex];
    ...
}

لأن المثال الأول يجب أن تجد مرارا وتكرارا مؤشر المقابلة ل "ميكولومننام".إذا كان لديك عدد كبير جدا من الصفوف ، فقد يكون الفرق ملحوظا.

في معظم الحالات ، لن يكون الاختلاف ملحوظا ، لذا يفضل سهولة القراءة.

تحديث

إذا كنت قلقا حقا بشأن الأداء ، فإن البديل عن استخدام الترتيبية هو استخدام دبينوميراتور فئة على النحو التالي:

foreach(IDataRecord record in new DbEnumerator(reader))
{
    ...
    var value = record["MyColumnName"];
    ...
}

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

نصائح أخرى

بالمقارنة مع سرعة الحصول على البيانات من القرص على حد سواء سوف تكون فعالة بأسرع بعضها البعض.

المكالمات اثنين ليست متكافئة:الإصدار مع مفهرس بإرجاع كائن ، في حين GetString() تحويل الكائن إلى سلسلة ، ورمي استثناء إذا لم يكن ذلك ممكنا (أي.العمود هو DBNull).

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

وبالنظر إلى كل ما سبق فما استقاموا لكم فاستقيموا استخدام GetString().

Indexer الطريقة أسرع لأنها ترجع البيانات في التنسيق الأصلي ويستخدم ترتيبي.

إلقاء نظرة على هذه المواضيع:

  1. تعظيم الأداء مع سكلداتاريدر
  2. <URL> سكلداتاريدر البند [] مقابل.جيتسترينج (جيتوردينال ())?
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top