J'ai une demande comme celle-ci
SELECT
[EstimateId],
[CreationUserId],
[EstimateStatusValueId],
[LanguageId],
[LocationId],
[EstimatorUserId],
[FilterUnitSystemTypeId],
[EstimateNumber],
[RevisionNumber],
[CreationDate],
[ModificationDate],
[ProjectDescription],
[IsBsdq],
[ClosingDate],
[ClosingTime],
[ClosingUpdatedOn],
[DeadLineDate],
[IsReceived],
[Inclusion],
[Exclusion],
[Misc],
[Note],
[WorkDeadLines],
[Comments],
[Validity],
[PlansLocation],
[PlansReceivedFrom],
[Price]
FROM [Estimate].[Estimates]
ORDER BY [ClosingDate] ASC, [ClosingTime] ASC
Lorsque j'exécute cette requête dans SSMS, j'obtiens un temps d'exécution de 953 ms, mais lorsque j'exécute cette requête à partir d'une requête Linq dans mon C #, j'obtiens un temps d'exécution de 1813 ms.
La requête Linq utilise le ".Net SqlClient Data Provider" et est émise contre EntityFramework (fichier EDMX). Est-ce que cela peut être un problème?
Quelqu'un sait-il pourquoi j'ai une grande différence entre les temps d'exécution de ces demandes qui sont les mêmes mais s'exécutent à partir d'un contexte différent par rapport à la même base de données?
J'ai vérifié tous les plans d'exécution des deux requêtes et ils utilisent le même index pour satisfaire leur requête respective.
Pour voir le plan d'exécution de la demande C #, j'utilise le profileur SQL pour intercepter l'événement Show Plan XML et je le compare à celui de SSMS et les deux sont les mêmes.
Réponses:
Est-ce cohérent, maintes et maintes fois?
Je vois une différence de CPU qui pourrait être du temps de compilation. Y a-t-il des paramètres LINQ qui affectent cela?
Éditer:
la source
Je pense que le problème réside dans l'utilisation du fichier EDMX pour générer des requêtes à partir de l'application C #.
J'ai trouvé ces liens qui expliquent le cas.
Projet de code
Stackoverflow-1
Stackoverflow-2
la source
Vous voudrez regarder les plans d'exécution pour les deux requêtes et voir où ils sont différents.
la source