Comment déterminer la taille en octets d'un jeu de résultats de LINQ à SQL
-
01-07-2019 - |
Question
Lors de l'écriture manuelle en SQL, il est assez facile d'estimer la taille et la forme des données renvoyées par une requête. J'ai de plus en plus de difficulté à faire cela avec les requêtes LINQ to SQL. Parfois, je trouve WAY plus de données que prévu, ce qui peut vraiment ralentir un client distant qui accède directement à une base de données.
J'aimerais pouvoir lancer une requête, puis dire exactement combien de données ont été renvoyées sur le réseau et utiliser cela pour m'aider à optimiser.
J'ai déjà connecté un journal à l'aide de la méthode DataContext.Log, mais cela ne me donne qu'une indication du code SQL envoyé, pas des données reçues.
Des conseils?
La solution
On dirait que vous pouvez récupérer le SqlConnection de votre DataContext et activer les statistiques.
L’une des statistiques est "Octets renvoyés".
Autres conseils
Remarque: vous devez convertir la connexion en SqlConnection si vous avez un DataContext existant
((SqlConnection)dc.Connection).StatisticsEnabled = true;
récupérez ensuite les statistiques avec:
((SqlConnection)dc.Connection).RetrieveStatistics()
Je n'ai trouvé aucun moyen de récupérer le SqlConnection du DataContext. J'ai donc créé le SqlConnection manuellement:
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();