2013-08-30 14 views
21

Sto usando EF6 rc1 con la strategia Code First, senza visualizzazioni precompilate e il problema è: Se compilo ed eseguo l'applicazione exe ci vuole come 15 secondi per eseguire la prima query (va bene, visto che sto ancora lavorando alle viste pre-generate). Ma se io uso Visual Studio 2013 Anteprima per eseguire il debug la stessa applicazione esatto ci vogliono quasi due minuti prima di eseguire la prima query:EF6/Codice Primo: Super slow durante la prima query, ma solo in Debug

Dim Context = New MyEntities() 
Dim Query = From I in Context.Itens '' <--- The debug takes 2 minutes in here 
Dim Item = Query.FirstOrDefault() 

C'è un modo per rimuovere questo tempo in più? Sto facendo qualcosa di sbagliato qui?

Ps .: Il contesto in sé non è complicato, è solo pieno di oltre 200 tabelle.

Modifica: Scoperto che il problema è che durante il tempo di debug l'EF sembra generare le Views ignorando quelle pre-generate. Utilizzando il codice sorgente da EF ho scoperto che la proprietà:

IQueryProvider IQueryable.Provider 
    { 
     get 
     { 
      return _provider ?? (_provider = new DbQueryProvider(
               GetInternalQueryWithCheck("IQueryable.Provider").InternalContext, 
               GetInternalQueryWithCheck("IQueryable.Provider").ObjectQueryProvider)); 
     } 
    } 

è dove il tempo viene consumato. Ma questo è strano poiché ci vuole solo del tempo nel debug. Mi sto perdendo qualcosa qui?

Modifica: Trovato più informazioni relative alla domanda: Utilizzo di Process Monitor (di Sysinternals) Ho scoperto che esiste il processo "desenv.exe" che sta consumando un sacco di tempo. Per essere più specifici il suo tempo di consumo con un 'Thread Exit'. Ripete 36 volte lo stack Esci thread. Non so se questa informazione è molto utile, ma ho salvato un file .cvs con lo stack, ecco il suo corpo: [...] (edit: rimosso il corpo di '.cvs', posso postarlo di nuovo dai commenti se qualcuno pensa davvero che sarà utile, ma è stato confuso e troppo grande.)

Modifica: installato VS2013 Ultimate e Entity Framework 6 RTM. Installato l'Entity Framework Power Tools Beta 4 e lo ha utilizzato per generare le Visualizzazioni. Nulla è cambiato ... Se eseguo l'exe ci vogliono 20 secondi, se I 'Start' debug richiede 120 secondi.

Modifica: creato un piccolo progetto per simulare l'errore: http://sdrv.ms/16pH9Vm Basta eseguire il progetto all'interno dell'ambiente e direttamente tramite l'exe, fare clic sul pulsante e confrontare il tempo di caricamento.

+0

Questo è un problema comune che ha afflitto EF per un bel po 'di tempo, ho pensato che stavano per affrontare in EF6 .. ma forse no .. Una cosa EF6 offre è la possibilità di rompere il vostro modello in più modelli, che potrebbe essere la soluzione migliore. –

+0

http://entityframework.codeplex.com/wikipage?title=Multi-tenant%20Migrations –

+0

L'interruzione in più contesti non ha cambiato nulla.Tutti i contesti seguono la "regola", quindi impiega quasi lo stesso tempo per caricarli, a meno che non carichi su richiesta, ma ho bisogno di caricarli tutti, poiché ci sono molte chiavi esterne tra di loro. –

risposta

12

Questo è un problema di prestazioni noto in Lazy (che EF sta utilizzando) quando il debugger è collegato. Al momento stiamo lavorando a una correzione (l'attuale approccio che stiamo esaminando sta rimuovendo l'uso di Lazy). Speriamo di poter spedire presto questa correzione in una versione patch. Puoi tenere traccia dell'avanzamento di questo problema sul nostro sito CodePlex - http://entityframework.codeplex.com/workitem/1778.

Maggiori dettagli sulla prossima versione 6.0.2 patch che includerà una correzione sono qui - http://blogs.msdn.com/b/adonet/archive/2013/10/31/ef6-performance-issues.aspx

+0

Grazie, dato che questo è un bug noto, segnerò come risposta e tengo traccia del worklema di codeplex. –

+2

Questa patch ha ancora problemi di prestazioni per me. –

-1

Non so se avete trovato la soluzione. Ma nel mio caso, ho avuto un problema simile che mi ha fatto perdere quasi una settimana dopo aver provato diversi suggerimenti. Alla fine, ho trovato una soluzione cambiando il mio web.config in optimizeCompilations = "true" e le prestazioni sono migliorate sensibilmente da 15-30 secondi a circa 2 secondi.

Problemi correlati