Pregunta

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 datos de los 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 utilizar esto para ayudarme a optimizar.

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

¿Algun consejo?

¿Fue útil?

Solución

Parece que puedes tomar SqlConnection de tu DataContext y activar las estadísticas.

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

Enlace de referencia de MSDN

Otros consejos

Nota:Debe transmitir la conexión a SqlConnection si tiene un DataContext existente

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

luego recupere las estadísticas con:

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

No encontré forma de obtener SqlConnection de DataContext, así que creé 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();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top