Riduci i tempi di avvio dell'app .NET form di Windows che esegue fuori da un'unità di rete
-
01-07-2019 - |
Domanda
Ho una semplice app per Windows .NET 2.0 che si esaurisce da un'unità di rete (ad esempio \ MyServer \ MyShare \ app.exe). È molto semplice e carica solo le librerie .NET minime. Tuttavia, il caricamento richiede ancora ~ 6-10 secondi. Le persone pensano che qualcosa debba essere sbagliato e che l'app così piccola impiega così tanto tempo a caricarsi.
Ci sono suggerimenti per migliorare la velocità di avvio?
Soluzione
Prova Sysinternals Process Explorer . Ha una colonna di "% tempo in JIT". Se tale numero è elevato, è possibile eseguire ngen sulla tua applicazione. In caso contrario, è probabile che sia una connessione di rete lenta. CodeGuru ha un tutorial su utilizzo di ngen .
Altri suggerimenti
Per accelerare il tempo di caricamento, è possibile compilare una piccola applicazione di avvio e lasciare che l'applicazione esegua il caricamento degli assembly in runtime da una libreria esterna alla cartella bin.
Determinare il tempo JIT per valutare la fattibilità di NGEN è sicuramente un buon punto di partenza. Concordo anche con coloro che cercano di ridurre i tempi di caricamento utilizzando un altro punto di ingresso per caricare gli assiemi. Spesso è il aspetto della velocità contro velocità effettiva che migliora l'esperienza dell'utente.
Imposta Clickonce per l'app in modo che sia distribuita sul computer locale.
Potresti imbrogliare come Microsoft Office (e Adobe credo) e aggiungere un'app nel gruppo Startup che dice all'app di caricare e quindi scaricare immediatamente. In questo modo le DLL sono pre-memorizzate nella cache per quando l'utente tenta di avviare l'app. Unico problema: non sono del tutto sicuro che funzioni in questo modo con i file di rete e, in caso contrario, questa potrebbe essere la causa dell'avvio lento (ovvero stai sempre facendo un avvio a freddo contro un possibile avvio a caldo se in esecuzione dal computer locale).