Cum se determină dimensiunea în octeți dintr-un set de rezultate de la LINQ la SQL

Când scrieți manualul SQL este destul de ușor de estimat dimensiunea și forma datelor returnate de o interogare. Mă simt din ce în ce mai greu să fac acest lucru cu ajutorul interogărilor LINQ la SQL. Uneori găsesc mai multe date decât mă așteptam - ceea ce poate încetini într-adevăr un client la distanță care accesează direct o bază de date.

Aș dori să pot rula o interogare și apoi să vă spun exact cât de mult informații au fost returnate pe fir și să folosesc aceasta pentru a mă ajuta să optimiz.

Am deja conectat un jurnal folosind metoda DataContext.Log, dar asta doar îmi dă o indicație a SQL trimis, nu a datelor primite.

Orice sfaturi?

0

3 răspunsuri

Notă: Trebuie să transmiteți conexiunea la un SqlConnection dacă aveți un DataContext existent

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

apoi recuperați statisticile cu:

 ((SqlConnection)dc.Connection).RetrieveStatistics()
0
adăugat

Se pare că puteți să luați SqlConnection din DataContext și să activați statisticile.

Una dintre statistici este "octeți returnat".

Link de referință MSDN

0
adăugat

Nu am gasit nici o modalitate de a apuca SqlConnection din DataContext, asa ca am creat manual 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();
0
adăugat