Ho una query sulla mia pagina che impiega almeno mezzo secondo per eseguire utilizzando EF 3.5. Quando ho usato una procedura memorizzata, la velocità era notevolmente più veloce. È una query molto complessa. Ci saranno miglioramenti delle prestazioni nel prossimo EF 4.0? E EF 4.0 ha davvero battuto 3,5 prestazioni?In che modo le prestazioni dell'entità framework 4 vs entity framework 3.5?
risposta
La risposta breve è troppo presto per dirlo. I ragazzi di .Net si stanno concentrando quasi esclusivamente sulle prestazioni fino a quando l'uscita del 12 aprile non sarà finalizzata e localizzata. Inoltre, cosa si intende per più veloce? Più veloce possono essere visualizzati in molti modi, ad esempio:
- Entity Framework 4.0 has new features, solo i miglioramenti oggetto di monitoraggio può significare enormi vittorie visto che non stai facendo che più veloce il lavoro manuale da soli ... in ogni caso, almeno del sviluppo .
- Se non ha funzionato prima, gli oggetti più leggeri con POCOsupport possono significare che molta meno memoria viene spostata quando si ha a che fare con molti oggetti. Non importa quanto piccolo sia il costo delle proprietà aggiuntive che vengono popolate durante il recupero dal DB, vi è un costo sia nell'istanziazione che nel loro monitoraggio (tempo di caricamento e consumo di memoria).
Nel tuo caso specifico, un mezzo secondo è un lungo tempoper qualsiasi cosa, ma una query di volume molto complesso o ad alta ... hai guardato per vedere quanto tempo viene speso nel database e quanto tempo viene speso una volta .Net ha i dati? Se passi la maggior parte del tuo tempo fuori da SQL allora sì, i miglioramenti di base nelle riflessioni in Net 4.0 dovrebbero darti dei miglioramenti di velocità ... tuttavia se passi tutto il tuo tempo in SQL, non sarà di grande aiuto affatto. La maggior parte del tuo problema di prestazioni potrebbe essere l'indicizzazione delle prestazioni di idratazione generate da SQL e non da Entity Framework.
avrei seguito il commento di Kane, guardare lo SQL sta generando per la tua ricerca, è possibile per voi di questo post e la stored procedure che è rapido in modo che possiamo forse trovare dove sta il problema?
Dalle ADO.NET blog:
Personalizzazione Richieste - Aggiunta del supporto per gli operatori LINQ esistenti, riconoscere un ampio insieme di modelli con LINQ, crei modello definito funzioni insieme alla capacità di utilizzare questi in LINQ e un numero di altri modi per creare e personalizzare le query .
SQL Generation Leggibilità Miglioramenti - Migliorare la leggibilità, insieme con TSQL ottimizzazioni delle prestazioni, dei query generati per rendere molto più facile da capire che cosa sta accadendo
Quindi questi due punti implicare si potrebbe vedere i miglioramenti nel modo in cui genera la query da LINQ.
Tuttavia è improbabile che un ORM sarà mai in grado di superare una query che hai scritto da zero in quanto deve soddisfare così tanti diversi scenari, e di solito il più comune è quello predefinito. EF 3.5 sembrava produrre un join SQL molto efficiente quando lo usavo, probabilmente il migliore che ho visto da un ORM quindi c'è speranza che tu possa sbarazzarti dell'SP in 4.0.
Se si dispone di una stored procedure, suppongo che si tratti di una query di grandi dimensioni: l'invio di questo testo SQL ogni volta al server causerà molto traffico di rete, che è un'altra cosa che si può o non si è potuto prendere in considerazione. Ovviamente sullo stesso server o all'interno della stessa rete interna si tratta di un'ottimizzazione dello stile di 'tagliare i capelli per perdere peso'.
Quando si tratta di query veramente complesse, non ho visto alcuna evidenza che nessuna L2S, NH o EF possa generare un piano di query migliore di quello che posso in un sproc. Adoro gli ORM (in particolare l'NH), ma ci sono ancora dei casi in cui il tempo di esecuzione dell'ORM può essere compensato da uno sproc scritto bene.
- 1. Entity Framework (3.5) - Rifiuta modifiche
- 2. Convenzioni Framework Entity 4
- 3. Entity Framework 4, che eredita rispetto all'estensione?
- 4. Entity Framework 4 - Eredità
- 5. Entity Framework 6 supporta .Net 3.5?
- 6. Entity framework vs NHibernate - Performance
- 7. query Linq in Entity Framework 4. Prestazioni orribili
- 8. - Annotazioni dati vs InChanging in Entity Framework 4
- 9. Entity Framework 3.5 - Come caricare i bambini
- 10. Entity Framework VS Ado.net
- 11. Entity Framework - Prestazioni nel conteggio
- 12. Entity framework 4 o DataSet?
- 13. In che modo Entity Framework gestisce le transazioni?
- 14. DB in memoria per Entity Framework 4
- 15. Chiavi univoche in Entity Framework 4
- 16. .NET Entity Framework Insert vs Bulk Insert
- 17. Entity Framework Find vs. Where
- 18. Utilizzando Entity Framework 4.0 in un Net 3.5 Application
- 19. Analisi delle prestazioni ADO.NET e Entity Framework
- 20. non installa .NET Framework 3.5
- 21. Entity Framework 4 Tabella Valore Funzione
- 22. Entity Framework 4/POCO - Da dove cominciare?
- 23. Ricerca Entity Framework 4 su campi combinati
- 24. Entity Framework + MySQL - Perché le prestazioni sono così terribili?
- 25. Entity Framework 4 Multiple Object Delete (RemoveAll)
- 26. MVC 4. e Entity Framework Tabella Registrati
- 27. Entity Framework 4 e valori predefiniti
- 28. Entity Framework Performance Issue
- 29. Entity Framework 4 POCO con dizionario
- 30. Classi basate su Entity Framework POCO Vs?
In una domanda a parte hai visto le differenze nel piano di esecuzione tra la stored procedure e quella generata da EF 3.5? – Kane