2015-06-18 11 views
6

Sono consapevole che questo è stato chiesto troppe volte, ma non sono riuscito a trovare una soluzione dalle domande poste.Codice quadro entità Primo 30+ secondi Tempo di avvio

Sono abbastanza nuovo in Entity Framework e ho sviluppato un piccolo pannello CMS per i miei siti Web utilizzando Entity Framework 6 e l'approccio Code First. Il mio problema è che il sito è molto lento quando si esegue (questo è il sito Web che sto attualmente testando www.oakwoodpawnshop.ca), ci vogliono più di 30 secondi per caricarlo. Dopo il primo caricamento, ci vuole circa un secondo per caricare altre pagine. Sto ottenendo 89/100 dalle informazioni di PageSpeed, tutti i miei file images/js/css sono ridotti al minimo e ho fatto altre ottimizzazioni front-end, quindi so che il mio problema è con EF. Ho un altro sito web che ho creato circa 3 anni fa usando solo LINQ, nessuna ottimizzazione del database o ottimizzazione html/immagine, e si apre in circa 3 secondi.

Ho viste pre generate utilizzando Power Tools di Entity Framework e non ho alcun metodo di inclusione nei miei codici. Ho filtrato le mie query prima della funzione .toList(). Probabilmente ho un problema con i miei codici o l'ottimizzazione del database, ma non riesco a trovare una soluzione attraverso la mia ricerca, perché quest'area è nuova per me.

Ho trovato un articolo nella mia lingua madre che chiede a qualcuno con lo stesso problema di eseguire alcuni codici al prompt dei comandi per vedere se il problema riguarda le impostazioni di rete.

Queste sono state le linee per prompt dei comandi:

1 - netsh int ip reset a.txt

2 - netsh winsock resettare

3 - winhttp netsh ripristino delega

4 - netsh advfirewall reset

5 - ipconfig/flushdns

6 - Riavvia il computer e ricontrolla.

Quando l'ho fatto e ho controllato sul sito Web, l'intero sito Web è stato aperto in 3 secondi. Dopo un po ', ha iniziato ad avere più di 30 secondi di avvio. Ovviamente non posso eseguire questi comandi sul computer di tutti, ma sono perso e non ho idea del perché ci sia voluto così tanto tempo per iniziare.

Ecco un esempio del metodo che sto usando:

public List<Categories> GetCategories() 
    { 
     List<Categories> c = db.Categories.Where(x => x.TopCategoryId == 0).OrderBy(x => x.CatOrder).ToList(); 

     return c; 
    } 

ho creato metodi personalizzati per andare a prendere i miei dati (in modo che io possa utilizzare più facilmente), in una classe di 'lavoratore' per raccogliere tutto il mio metodi in una classe. Potrebbe essere il problema?

Sarei felice di fornire ulteriori informazioni di cui hai bisogno, e sto trattando questo per circa un mese ora senza fortuna, quindi sono disperatamente alla ricerca di una risposta, o dovrò ricreare tutta l'applicazione senza EF, perché in nessun modo un cliente aspetterebbe un sito web con un tempo di apertura di +30 secondi.

Grazie in anticipo per tutti i vostri consigli!

+0

Il problema è molto probabile con le migrazioni. Stai ancora lavorando attivamente alla tua applicazione in cui devi avere le migrazioni attive? Ogni volta che l'applicazione si avvia per la prima volta, __migrationHistory deve essere controllato; se la tua app non cambia più attivamente, la disattivazione delle migrazioni o il portare la migrazione di base a una singola migrazione corrente da un database vuoto dovrebbe essere d'aiuto. – Claies

+0

Ciao @Claies, grazie mille per essere così veloce :) Sto solo lavorando sulla mia applicazione sul lato dei contenuti, quindi non c'è stato alcun cambiamento nel database per un tempo molto lungo. Ho eliminato la mia cartella della cronologia delle migrazioni e la cartella delle migrazioni e ho pubblicato di nuovo il sito Web, posso chiedere se è possibile verificare se è stato risolto? Mi sembra più veloce ora –

risposta

1

È possibile inizializzare il database Entity Framework. Sostituire DbContext con la classe di contesto:

using(var context = new DbContext()) 
{ 
    context.Database.Initialize(false); 
} 

Se si utilizza asp.net MVC, è possibile farlo dal vostro metodo Application().Tuttavia, è necessario utilizzare il modulo Application Initialization (disponibile per IIS 7.5 come extension). Modificare la voce del pool di applicazioni in modo che il pool di applicazioni sia sempre in esecuzione. Rimuovi il timeout di inattività. Configurare il riciclo del pool di applicazioni IIS a un'ora specifica (ad esempio, alle 04:00). Potrebbe essere necessario specificare la pagina di inizializzazione nel web.config ('/' è di default):

<applicationInitialization> 
    <add initializationPage="/initialze" /> 
</applicationInitialization> 

Quei passi non saranno completamente riscaldarsi Entity Framework, ma notevolmente ridurre il tempo di avvio a freddo.

+0

HI Ranquild, grazie mille per la tua risposta. Ho inizializzato il mio database ef, ma per il resto dei tuoi consigli, sto usando un server di hosting condiviso. Non sono sicuro di avere accesso a quelle impostazioni che hai menzionato. Posso ancora apportare queste modifiche all'hosting condiviso? Grazie :) –

+0

L'inizializzazione di un database ef dovrebbe essere sufficiente. Per altre modifiche, è per il riavvio dell'applicazione determinata. – ranquild

+0

OK bene, ho pubblicato di nuovo il mio sito, ma sembra che si stia aprendo lentamente, un po 'più veloce di prima. Posso chiederti se puoi verificare come si apre sul tuo browser? Grazie! –

Problemi correlati