Buonasera, in questi giorni vi sto tartassando di domande ( lo so che mi odiate già), da premettere che ho già affrontato questo problema , effettuando ricerche,prove, forum msdn, ma non sono riuscito a risolvere.(view pregenerate, ngen)
Premetto che sto facendo i test in una macchina abbastanza veloce (ssd,16gb ram i7overclock) quindi su una macchina di un cliente i tempi possono solo aumentare.
Arrivo subito al dunque, il problema è il classico startup di ef(so che perde del tempo per generarsi le view e quantaltro), perde secondo me troppo tempo (nella mia macchina circa 30 secondi). Quindi il cliente quando apre la mia applicazione deve aspettare 30+ secondi, ovviamente c'è una splashcreen con un barprogress infinite, prima di accedere al menu e alla dashboard, utilizzo sql server, ef 6.1.3 code first, le migrazioni manuali, wpf mvvm.
Il db è composta da circa 330 tabelle tra cui 60/70 entita con relazione uno a molti.
Aggiungo il link di SednaContex(per capire la struttura del mio db):
https://drive.google.com/open?id=0B0IzbkNqehmaZXl0T213Q1IwaVE Quando avvio la mia applicazione io effettuo un controllo del modello per vedere se ci sono stati cambiamenti, in tal caso di eseguire la migrazione.
La maggior parte del tempo lo perde proprio li...piu dopo faccio una query fittizia (cold query) per far in modo che quando l'utente (finalmente) entra non avra qualla sensazioni di freeze quando fara la prima query.
**************Compatible******************
var sednaContext = new SednaContext(dbHelper.CreateConnectionString(Ditta, ditte?.DirectoryDitta));
var compatibleWithModel = sednaContext.Database.CompatibleWithModel(true);
if (!compatibleWithModel)
{
var result = RunMigrations();
}
*******Fine Compatible: 14987ms***
**************ColdQuery******************
var datiDitta = datiDittaRepository.Prendi(string.Empty);//coldquery
********Fine Cold Query: 13748ms******
Come si puo vedere in questo esempio ho aggiunto il tempo che ci sta per eseguire, soltanto queste due operazioni circa 28 secondi + altri secondi per caricare il menu e la mainview, ma sono pochi secondi quindi non è importante.
Ora volevo capire se c'è qualcosa di sbagliato nella mia implementazione, se ci sono altri metodi, o implementazioni per poter risolvere il problema, perchè penso che ci sono in giro software fatti con ef e sopratutto molto piu grandi di questo... spero che qualcuno possa aiutarmi perchèe questo problema c'è lho da molto tempo ma l'ho ignorato, ma adesso è diventato di primaria importanza
EDIT:
ho creato un programma console per rendere megli olidea dove mi stampa a video il tempo che ci vuole per confrontare il modello e per la cold query
https://drive.google.com/open?id=0B0IzbkNqehmaX1dUN3ZWWEJTMHM
Modificato da brux88 il 25 maggio 2016 18.07 -
Vi aggiorno con alcune prove (senza risultato):
Ho provato anche con ngen vi posto lo screenshot dove si vede il risultato, le creazioni di tutte le dll con ngen, e tramite windows process la verifica che utilizza le immagini native, ma il risultato non è cambiato:
https://drive.google.com/open?id=0B0IzbkNqehmaMkRsXzYyc25RRHc Per quanto riguarda le pre generate view con vs 2015 non me li fa f are perche mi da un errore di compilazione di un path troppo lungo, ho letto che con il nuovo compilatore rosylin c'è questa limitazione ma non so....
Modificato da brux88 il 26 maggio 2016 10.21 -