Ho un problema di prestazioni che abbiamo fatto un sacco di analisi e sono bloccati. Spero che qualcuno di voi abbia già visto questo.EF6 SQLQuery molto lento ma il database è molto veloce
Sto chiamando DbContext.Database.SqlQuery
la parte del database richiede 3 ms ma l'esecuzione completa richiede 9 secondi.
Abbiamo utilizzato EF Profiler per scoprirlo e abbiamo anche eseguito SQL direttamente in SQL Server Management Studio ed è istantaneo.
Abbiamo anche usato un'occhiata e non siamo riusciti a vedere abbastanza in profondità nel processo.
Il tipo di risultato non è un'entità del modello e pertanto siamo certi che il tracciamento non sia coinvolto.
Sappiamo anche che questa non è la prima query eseguita sul contesto, pertanto non stiamo pagando il costo di avvio EF su questa query.
Abbiamo provato il .net profiler e abbiamo avuto così tanti problemi che abbiamo deciso di chiedere.
Qualche consiglio su come scavare e scoprirlo?
EDIT: Il set di risultati per questa ricerca è 1 riga con 4 colonne (decimale)
La linea di codice è solo:
var list=contextInstance.Database.SqlQuery<nonEntityType>(sqstring).ToList();
SQL sé non è una stringa molto lunga. Utilizzeremo un profiler più dettagliato per scoprire in che punto del processo si blocca.
L'unica cosa che posso immaginare è che un'enorme quantità di dati va sul filo, e ci vuole tempo per creare la lista/matrice risultante/qualunque sia l'elaborazione del risultato. Questo non viene misurato nel tempo di esecuzione SQL –
Scommetto su indici. –
@DavidLeitner Non penso che sia un problema di indice * perché la query stessa viene eseguita molto rapidamente in SQL Server. Quindi è qualcosa prima che la query venga inserita nel db o in uscita. Nessuna delle query LINQ sta mostrando questo tipo di differenza. L'intervallo tra il tempo di esecuzione db e il tempo di esecuzione completo della query EF è minimo. * Voglio sempre dire anche degli indici! :) Non so mai quale sia corretto! :) –