Como determinar o tamanho em bytes de um conjunto de resultados de LINQ to SQL
-
01-07-2019 - |
Pergunta
Ao escrever SQL manual do seu muito fácil de estimar o tamanho ea forma dos dados retornados por uma consulta. Eu estou encontrando cada vez mais difícil fazer isso com o LINQ para consultas SQL. Às vezes eu acho muito mais dados do que eu estava esperando -. O que pode realmente diminuir um cliente remoto que está acessando um banco de dados diretamente
Eu gostaria de ser capaz de executar uma consulta e, em seguida, dizer exatamente o quanto de dados foi devolvido através do fio, e usar isso para me ajudar a otimizar.
Eu já ligado um registo utilizando o método DataContext.Log, mas isso só me dá uma indicação do SQL enviados, não os dados recebidos.
Todas as dicas?
Solução
Parece que você pode pegar o SqlConnection do seu DataContext e ligue estatísticas.
Uma das estatísticas é "bytes retornados".
Outras dicas
Nota: Você precisa lançar a conexão a um SqlConnection se você tiver um existente DataContext
((SqlConnection)dc.Connection).StatisticsEnabled = true;
, em seguida, recuperar as estatísticas com:
((SqlConnection)dc.Connection).RetrieveStatistics()
Eu não encontrei nenhuma maneira de agarrar 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();