J'ai une requête LINQ qui récupère les lignes d'une vue basée sur une colonne id (où id = id @)LINQ vs (app ou .NET vs studio de gestion SQL Server) SQL
Cette requête prend 4 secondes pour courir. J'ai utilisé SQL Server Profiler pour inspecter la requête qui est exécutée par linq, et si je copie cette requête directement au studio de gestion et à l'exécution, la requête ne prend que 56ms.
Cette augmentation de temps exponentielle est cohérente dans toutes les requêtes linq aux vues de mon application. Quelle pourrait être la cause de cette durée d'exécution étendue dans mon application (WPF) lorsque les mêmes requêtes exécutent < 100ms?
== == EDIT
J'ai réussi à isoler davantage, les commentaires montrent la durée de profileur;
/* 3953ms, 111487 reads */
context.SkuView.Where(p => p.TermId == 35 && !p.IsDeleted).ToList();
/* 90ms, 173 reads */
context.SkuView.Where(p => p.TermId == 35).ToList();
Si je colle les requêtes linq (sql rendues) directement dans ssms je reçois;
/* 250ms, 173 reads */
SELECT * FROM SkuView WHERE TermId == 35 AND IsDeleted = 0
/* 250ms, 173 reads */
SELECT * FROM SkuView WHERE TermId == 35
Le problème a quelque chose à voir avec le lecture compte par LINQ lors de l'utilisation p.IsDeleted ...
Wow, c'est une différence de temps énorme. Pour être clair, les 4 secondes à courir est le temps qu'il faut à la requête pour exécuter selon SQL Profiler? – Pandincus
correct. linq exécute la requête à l'aide de exec sp_executesql et le profileur affiche un temps d'exécution de 4 secondes. Si je copie exactement exec _sp_executesql qui vient de s'exécuter, et l'exécuter dans SSMS, profileur montre 58ms –
L2S n'est pas le moyen le plus efficace d'interroger une base de données, mais c'est une différence assez massive. – Phill