2009-06-25 16 views
6

Ho lavorato a un'applicazione WinForms che ha circa 5 assembly referenziati, scritti da noi, e circa 8 assembly referenziati da terze parti (non speriamo di aggiornarli in futuro a meno che qualcosa non vada terribilmente sbagliato - componenti Infragistics/DevExpress!).Best practice NGen e Gacutil

I nostri tempi di avvio sono un po 'troppo alti per gli stivali freddi, quello che mi chiedo è se aggiungerli al Gac e ingannarli è la strada da percorrere.

Quando stiamo installando nella cache NGen, è necessario che sia presente anche nel gac? Qual'è la connessione tra i due? A cosa dovrei mirare? Abbiamo un exe, farei un ILMerge ma non sono sicuro che funzionerà nel nostro scenario - lunga storia.

Inoltre, è possibile ottenere la quantità di memoria il mio exe sta prendendo - tanto come le applicazioni Java fanno

+1

Si potrebbe desiderare di fare uno scavo con un profiler per vedere prima cosa causa la lentezza. ANTS (di RedGate) è una buona scelta. – Pondidum

risposta

0

Sembra a me che la definizione del problema è in qualche modo implica la soluzione ☺

(come Netbeans!)

In altre parole, come fai a sapere che l'ora di avvio proviene dal caricamento degli assiemi?

Quello che dovresti fare è profilare l'app e assicurarti che sia così. È possibile, ma cosa succede se è in corso l'inizializzazione e ti stai concentrando troppo sull'ottimizzazione del punto sbagliato?

Here ci sono alcuni strumenti che dovrebbero aiutarvi a profilare le app non gestite.

Poiché si sta parlando di app Winforms, presumo che tu abbia Visual Studio. In tal caso, è possibile utilizzare its profiler per l'app gestita.

Buona fortuna!

0

Se non si utilizza 3.5 SP1 del framework .net, è necessario prendere in considerazione il benchmarking su tale piattaforma per vedere se si ottiene una differenza. Ci sono stati miglioramenti apportati che potrebbero migliorare i tempi di applicazione di avvio: CLR Optimizations In .NET Framework 3.5 SP1

This article ha anche alcune buone linee guida generali, le migliori pratiche NGEN e trucchi con evitando il ribasamento di assembly (anche se per le assemblee 5 o giù di lì si fa riferimento si sta lavorando con, non aspettatevi miracoli).

Tuttavia è probabile che si ottenga la riduzione più significativa del tempo di avvio cercando i colli di bottiglia specifici nella propria app particolare, anziché trovare una soluzione rapida altrove.

4

L'idea principale per migliorare il tempo di avvio è utilizzare l'inizializzazione ritardata quando possibile. Non istanziare cose che non sono necessarie immediatamente dopo l'avvio. Utilizzare il modello lazy init. È anche possibile avviare l'inizializzatore di background worker dopo che show main form esegue un'inizializzazione non critica. Ecc, ecc. Ecc.

È anche possibile controllare il seguente article (Improving Application Startup Time).

+1

+1 per l'articolo CLR Inside Out sul miglioramento del tempo di avvio dell'applicazione. Molto utile. (Dovresti includere il titolo dell'articolo nel tuo collegamento ipertestuale però - quasi non ho cliccato.) – dthrasher