So ermitteln Sie die Größe eines Ergebnissatzes in Byte von LINQ to SQL

Beim Schreiben von manueller SQL ist es ziemlich einfach, die Größe und Form der von einer Abfrage zurückgegebenen Daten zu schätzen. Ich finde es immer schwieriger, dies mit LINQ to SQL-Abfragen zu tun. Manchmal finde ich WAY mehr Daten, als ich erwartet habe - was wirklich einen Remote-Client verlangsamen kann, der direkt auf eine Datenbank zugreift.

Ich möchte in der Lage sein, eine Abfrage auszuführen und dann genau zu sagen, wie viele Daten über den Draht zurückgegeben wurden, und dies zu verwenden, um mich zu optimieren.

Ich habe bereits ein Protokoll mit der DataContext.Log-Methode angeschlossen, aber das gibt mir nur einen Hinweis auf die gesendete SQL, nicht die empfangenen Daten.

Irgendwelche Tipps?

0

3 Antworten

Hinweis: Sie müssen die Verbindung zu einer SqlConnection konvertieren, wenn Sie über einen vorhandenen DataContext verfügen

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

dann die Statistiken abrufen mit:

 ((SqlConnection)dc.Connection).RetrieveStatistics()
0
hinzugefügt

Sieht so aus, als könntest du die SqlConnection deines DataContext greifen und Statistiken aktivieren.

Eine der Statistiken ist "Bytes zurückgegeben".

MSDN Referenzlink

0
hinzugefügt

Ich habe keine Möglichkeit gefunden, die SqlConnection des DataContext zu erfassen, also habe ich die SqlConnection manuell erstellt:

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
hinzugefügt