Domanda

sto usando C ++ / CLI su Windows. Si tratta di un app MFC costruito con / CLR.

Voglio testare quanto tempo ci vuole la mia domanda per l'avvio. La prima volta che ci sono voluti 10 secondi, ma in seguito ha preso 4s, 4s, 5s. Sto assumendo questo è dovuto a Windows cache le DLL.

C'è qualche strumento che mi permette di rimuovere una directory dalla cache, in modo che le mie condizioni di prova sono gli stessi ogni volta? Io non voglio avere a riavviare tra i test:)

È stato utile?

Soluzione

Se si sta utilizzando il framework .Net, è probabile che quei 6 secondi in attesa che il quadro per inizializzare (carico Mscoree.dll, etc.). CLR Inside Out: Miglioramento delle prestazioni delle applicazioni di avvio è un articolo che è stato scritto per la rivista MSDN.

Un avvio a freddo ha bisogno di caricare tutto il .Net Framework, così come eseguire il compilatore JIT per generare il codice.

  

Nella maggior parte dei casi, l'avvio a freddo è di I / O bound. In altre parole, più tempo viene speso in attesa dei dati rispetto a quanto speso istruzioni di elaborazione. Il tempo necessario per avviare l'applicazione è uguale al tempo necessario al sistema operativo di scaricare codice dal disco più il tempo necessario per eseguire un'ulteriore elaborazione come JITing il codice IL e qualsiasi altra inizializzazione che viene eseguita nel percorso di avvio del applicazione. Dal momento che l'elaborazione di solito non è il collo di bottiglia in un avvio a freddo, l'obiettivo iniziale di qualsiasi indagine prestazioni di avvio dell'applicazione è quello di ridurre l'accesso al disco, riducendo la quantità di codice che viene caricato.

Quando si avvia l'applicazione per la seconda volta, quasi tutti di questo è fatto. cioè Le DLL sono stati caricati, può tirare il codice precedentemente compilato, ecc.

La cosa migliore che puoi fare per ridurre il tempo di avvio è quello di ridurre la quantità di .NET framework chiama prima che i primi spettacoli della finestra (dal momento che tutto questo dovrà essere compilato prima che possa funzionare) e ridurre la quantità di dischi I / O bisogno di avviare il programma.

Una volta che il programma è installato e funzionante, qualsiasi IL non compilato da Net sarà compilato dal compilatore JIT prima volta che viene chiamato.

Inoltre, per quanto ne so, una volta che il quadro è caricato, non c'è un modo semplice per scaricarlo senza riavviare (se si può scaricarlo a tutti). Avere una macchina virtuale in uno stato salvato poco prima di caricare il quadro potrebbe ridurre drasticamente il tempo necessario per "ripartenze".

Altri suggerimenti

Quello che ha detto Joshua, più, guarda il terzo comma questa risposta .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top