Mam taką prośbę
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
Kiedy uruchamiam to zapytanie w SSMS, otrzymuję czas wykonania 953ms, ale kiedy uruchamiam to zapytanie z zapytania Linq w moim C #, otrzymuję czas wykonania 1813ms.
Kwerenda Linq używa „.Net SqlClient Data Provider” i jest wydawana przeciwko EntityFramework (plik EDMX). Czy to może być problem?
Czy ktoś wie, dlaczego mam dużą różnicę między czasami wykonania tych żądań, które są takie same, ale są wykonywane z innego kontekstu na tej samej bazie danych?
Sprawdziłem wszystkie plany wykonania obu żądań i używają tego samego indeksu, aby spełnić odpowiednie zapytanie.
Aby zobaczyć plan wykonania żądania C #, używam profilera SQL do przechwytywania zdarzenia Show Plan XML i porównuję go do SSMS i oba są takie same.
Odpowiedzi:
Czy to jest spójne za każdym razem?
Widzę różnicę procesora, która może być czasem kompilacji. Czy wpływają na to jakieś ustawienia LINQ?
Edytować:
źródło
Myślę, że problem polega na użyciu pliku EDMX do generowania zapytań z aplikacji C #.
Znalazłem linki, które wyjaśniają sprawę.
Projekt kodowy
Stackoverflow-1
Stackoverflow-2
źródło
Będziesz chciał spojrzeć na plany wykonania dla dwóch zapytań i zobaczyć, gdzie się różnią.
źródło