Cómo determinar el tamaño en bytes de un conjunto de resultados de LINQ a SQL

Al escribir SQL manual, es bastante fácil estimar el tamaño y la forma de los datos devueltos por una consulta. Cada vez me resulta más difícil hacer esto con consultas de LINQ a SQL. A veces encuentro MUCHO más información de la que esperaba, lo que realmente puede ralentizar a un cliente remoto que accede directamente a una base de datos.

Me gustaría poder ejecutar una consulta y luego decir exactamente cuántos datos se han devuelto a través del cable, y usar esto para ayudarme a optimizar.

Ya conecté un registro utilizando el método DataContext.Log, pero eso solo me da una indicación del SQL enviado, no de los datos recibidos.

¿Algun consejo?

0
agregado
Puntos de vista: 1

3 Respuestas

Nota: debe conectar la conexión SqlConnection si tiene un DataContext existente

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

luego recupera las estadísticas con:

 ((SqlConnection)dc.Connection).RetrieveStatistics()
0
agregado

Parece que puede tomar la conexión SQL de su DataContext y activar las estadísticas.

Una de las estadísticas es "bytes devueltos".

Enlace de referencia de MSDN

0
agregado

No encontré la manera de capturar la conexión Sql del DataContext, así que creé el SqlConnection manualmente:

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
agregado