Como determinar o tamanho em bytes de um conjunto de resultados do LINQ to SQL

Ao escrever SQL manual, é muito fácil estimar o tamanho e a forma dos dados retornados por uma consulta. Estou cada vez mais difícil fazer isso com as consultas LINQ to SQL. Às vezes, encontro mais dados do que esperava - o que pode realmente atrasar um cliente remoto que está acessando um banco de dados diretamente.

Gostaria de poder executar uma consulta e, em seguida, dizer exatamente quantos dados foram retornados pela rede e usá-los para me ajudar a otimizar.

Eu já conectei um log usando o método DataContext.Log, mas isso só me dá uma indicação do SQL enviado, não dos dados recebidos.

Alguma dica?

0
adicionado
Visualizações: 2

3 Respostas

Nota: Você precisa converter a conexão para um SqlConnection se tiver um DataContext existente

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

em seguida, recupere as estatísticas com:

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

Parece que você pode pegar o SqlConnection do seu DataContext e ativar as estatísticas.

Uma das estatísticas é "bytes retornados".

Link de referência MSDN

0
adicionado

Eu não encontrei nenhuma maneira de pegar o SqlConnection do DataContext, então eu criei o 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
adicionado