Procedure consigliate per migliorare le prestazioni di Entity Framework

Entity Framework di Microsoft è un ORM esteso che ti aiuta a isolare il modello a oggetti della tua applicazione dal modello di dati. È un framework ORM open source per ADO.Net ed è incluso come parte di .Net Framework. In questo post, presenterò alcuni suggerimenti che possono essere seguiti per ottimizzare le prestazioni di Entity Framework. Nelle sezioni che seguono, esaminerò alcuni suggerimenti che possono essere adottati per migliorare le prestazioni dell'applicazione quando si lavora con Entity Framework.

Il tuo Entity Data Model rappresenta una singola unità di lavoro?

Quando crei il tuo EDM (Entity Data Model) dovresti assicurarti che EDM rappresenti una singola unità di lavoro e non l'intero database, specialmente quando hai molti oggetti (tabelle, stored procedure, viste, ecc.) Nel tuo database che sono disconnessi o non sono necessari per una particolare unità di lavoro. Se l'EDM rappresenta l'intero database quando non è necessario, può ridurre le prestazioni dell'applicazione a causa della necessità di caricare molti oggetti non necessari nella memoria. In sostanza, dovresti suddividere un modello di dati di entità di grandi dimensioni in modelli più piccoli con ogni modello che rappresenta un'unità di lavoro.

È possibile fare riferimento a questo articolo di MSDN per ulteriori informazioni su come migliorare le prestazioni di Entity Framework.

Disabilita il rilevamento delle modifiche

È necessario disabilitare il rilevamento delle modifiche se non è necessario. Ancora più importante, non è necessario il rilevamento delle modifiche quando si desidera semplicemente recuperare i dati e gli aggiornamenti sui dati letti non sono affatto necessari. È possibile utilizzare la seguente istruzione per disabilitare il rilevamento delle modifiche o memorizzare nella cache il risultato di una query quando si desidera recuperare i clienti dal database senza la necessità di aggiornare i record.

Se desideri disabilitare il tracciamento degli oggetti per la tabella Clienti, puoi utilizzare il codice seguente.

PayrollContext context = new PayrollContext();

Riduci il costo della generazione di visualizzazioni utilizzando le visualizzazioni pre-generate

La creazione di ObjectContext è un'operazione costosa in quanto implica il costo del caricamento e della convalida dei metadati. È necessario sfruttare le visualizzazioni pre-generate per ridurre il tempo di risposta quando viene eseguita la prima richiesta. In sostanza, il runtime di Entity Framework crea un set di classi (chiamato anche visualizzazione) quando viene creata un'istanza del contesto dell'oggetto per la prima volta. È possibile ridurre questo sovraccarico generando la vista per il file EDMX utilizzando lo strumento della riga di comando EdmGen.exe o i modelli T4. Si noti che se i file dello schema del modello sono stati modificati, sarà necessario rigenerare il file delle visualizzazioni eseguendo EdmGen.exe con il flag / mode: ViewGeneration. Puoi anche pre-generare le viste con un modello code first.

Disabilita il rilevamento automatico delle modifiche

Quando si tenta di aggiornare il database, Entity Framework deve conoscere le modifiche che sono state apportate a un'entità dal momento in cui è stata caricata in memoria. Questo rilevamento delle modifiche viene eseguito confrontando i vecchi valori delle proprietà con i valori nuovi o modificati quando si effettua una chiamata a metodi come i metodi Find (), Remove (), Add (), Attach () e SaveChanges (). Questo rilevamento delle modifiche è molto costoso e può ridurre le prestazioni dell'applicazione principalmente quando si lavora con molte entità. È possibile disabilitare il rilevamento delle modifiche utilizzando il codice seguente.

Quando si desidera disabilitare il rilevamento delle modifiche, è buona norma disabilitarlo all'interno di un blocco try / catch e quindi riattivarlo all'interno del blocco finally. Si noti che è possibile ignorarlo quando si lavora con un set di dati relativamente piccolo: si otterrebbero miglioramenti significativi delle prestazioni disattivando il rilevamento delle modifiche quando si lavora con un set di dati di grandi dimensioni.

Altri punti da tenere a mente

Utilizzare le proiezioni per selezionare solo i campi necessari durante il recupero dei dati. Dovresti evitare di recuperare i campi che non sono necessari.

Il frammento di codice seguente illustra come è possibile utilizzare i dati di recupero in modo impaginato: si noti come l'indice della pagina iniziale e la dimensione della pagina sono stati usati per selezionare solo i dati necessari.

int pageSize = 25, startingPageIndex = 1;

NorthwindEntities dataContext = new NorthwindEntities();

List lstCus = dataContext.tblCustomers.Take(pageSize)

.Skip(startingPageIndex * pageSize)

.ToList();

È inoltre necessario selezionare la raccolta appropriata e utilizzare query compilate per migliorare le prestazioni delle query LINQ durante il recupero dei dati esposti da EDM. Evita di estrarre tutti gli oggetti del database in un modello di dati di entità. Recuperare solo il numero di record necessari ed evitare di utilizzare "Contiene" quando si utilizza LINQ to Entities. È possibile utilizzare il paging per recuperare solo i dati richiesti o limitare la quantità di dati recuperati dal database. Inoltre, dovresti aggiungere indici alle tue entità effettuando una chiamata al metodo CreateIndex ().

È possibile saperne di più sulle considerazioni sulle prestazioni quando si usa Entity Framework da questo collegamento.