كيفية تحديد الحجم بالبايت لمجموعة النتائج من LINQ إلى SQL
-
01-07-2019 - |
سؤال
عند كتابة SQL يدويًا، من السهل جدًا تقدير حجم وشكل البيانات التي يتم إرجاعها بواسطة الاستعلام.أجد صعوبة متزايدة في القيام بذلك باستخدام LINQ لاستعلامات SQL.في بعض الأحيان أجد بيانات أكثر بكثير مما كنت أتوقعه - وهو ما يمكن أن يؤدي إلى إبطاء العميل البعيد الذي يصل إلى قاعدة البيانات مباشرة.
أود أن أكون قادرًا على تشغيل استعلام ثم تحديد مقدار البيانات التي تم إرجاعها عبر السلك بالضبط، واستخدام هذا لمساعدتي في تحسين الأداء.
لقد قمت بالفعل بتوصيل سجل باستخدام طريقة DataContext.Log، ولكن هذا يعطيني فقط إشارة إلى SQL المرسل، وليس البيانات المستلمة.
أي نصائح؟
المحلول
يبدو أنه يمكنك الحصول على SqlConnection الخاص بـ DataContext وتشغيل الإحصائيات.
إحدى الإحصائيات هي "إرجاع البايتات".
نصائح أخرى
ملحوظة:تحتاج إلى إرسال الاتصال إلى 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();