كيفية تحديد الحجم بالبايت لمجموعة النتائج من LINQ إلى SQL

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

سؤال

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

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

لقد قمت بالفعل بتوصيل سجل باستخدام طريقة DataContext.Log، ولكن هذا يعطيني فقط إشارة إلى SQL المرسل، وليس البيانات المستلمة.

أي نصائح؟

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

المحلول

يبدو أنه يمكنك الحصول على SqlConnection الخاص بـ DataContext وتشغيل الإحصائيات.

إحدى الإحصائيات هي "إرجاع البايتات".

رابط MSDN المرجعي

نصائح أخرى

ملحوظة:تحتاج إلى إرسال الاتصال إلى SqlConnection إذا كان لديك DataContext موجود

 ((SqlConnection)dc.Connection).StatisticsEnabled = true;

ثم قم باسترداد الإحصائيات باستخدام:

 ((SqlConnection)dc.Connection).RetrieveStatistics()

لم أجد طريقة للحصول على SqlConnection من DataContext، لذلك قمت بإنشاء SqlConnection يدويًا:

SqlConnection sqlConnection = new SqlConnection("your_connection_string");
// enable statistics
cn.StatisticsEnabled = true;

// create your DataContext with the SqlConnection
NorthWindDataContext nwContext = new NorthWindDataContext(sqlConnection);

var products = from product in nwContext
               where product.Category.CategoryName = "Beverages"
               select product;
foreach (var product in products)
{
    //do something with product
}

// retrieve statistics - for keys see http://msdn.microsoft.com/en-us/library/7h2ahss8(VS.80).aspx
string bytesSent = sqlConnection.RetrieveStatistics()["BytesSent"].ToString();
string bytesReceived = sqlConnection.RetrieveStatistics()["BytesReceived"].ToString();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top