Come determinare se il mio codice è ottimizzato?

3

Sono solo sviluppatore che lavora su un progetto. La funzionalità che ho codificato funziona secondo le aspettative (risultato desiderato) ma poiché sono l'unico non so se posso fare qualcosa di meglio. Come posso determinare se il mio codice è ottimizzato (voglio aumentare le prestazioni di alcune funzionalità)?

Una cosa che viene in mente è Code Review ma non c'è nessuno libero qui per rivedere il mio codice. Continuo a provare con la logica alternativa, ma a volte le cose diventano stagnanti e davvero sporche. C'è un altro modo possibile?

    
posta Shirish11 18.05.2012 - 13:35
fonte

6 risposte

12

Chiediti:

  1. Per cosa vuoi ottimizzare?
  2. Ho davvero bisogno di ottimizzare per questa particolare cosa, o è abbastanza buono?

Per quanto riguarda "what for", alcune possibili risposte e cosa dovresti fare:

  • manutenibilità - il test migliore qui è l'utilizzo della produzione nel mondo reale, ma l'utilizzo di questo da solo genera una sorta di circolo vizioso. Tuttavia, puoi chiedere a qualcun altro di rivedere il tuo codice; puoi controllare se gli altri possono lavorare bene con esso; puoi scorrere un elenco di ciò che consideri odori di codice o, in modo più positivo, un elenco di ciò che consideri i must per codice ben scritto. Documenta tutto e chiedi a qualcun altro di leggere la documentazione e di dirti quali parti non sono chiare.
  • correttezza e affidabilità - scrivi test automatici che coprono tutto ciò che può essere significativamente testato e progetta il tuo codice per essere il più verificabile possibile. Metti il cappello della tua distruzione e vedi se puoi usare il tuo codice in un modo che lo spezzi; poi vai a ripararlo. Scrivi un piano di test dettagliato che copra tutti i requisiti funzionali e tecnici, compresi i casi "negativi" (ad esempio, descrivi cosa ti aspetti che il codice faccia quando lo usi in modi non previsti); lascia che qualcun altro esegua il piano di test e consideri tutti i bug di risposte negative nel design, nel codice o nel piano di test.
  • Prestazioni in fase di esecuzione : non è possibile sostituire il profiling qui. Prima di tentare di ottimizzare qualsiasi cosa per le prestazioni, prima assicurati che sia corretta; quindi assicurati che la parte che stai per ottimizzare sia effettivamente un'area problematica. Quindi cambia una cosa e misura le prestazioni prima e dopo. Non dimenticare di testare dati realistici, inclusi enormi set di dati: molti algoritmi funzionano bene (anche più velocemente) per piccoli set di dati, ma si arrestano quando il set di dati supera una certa dimensione. Ottimizza gli algoritmi prima del codice: gli algoritmi possono fare una differenza esponenziale, mentre l'ottimizzazione del codice non ti consente praticamente mai di ottenere guadagni oltre il lineare. Inoltre, vai per le semplici correzioni: impostazioni di ottimizzazione del compilatore (queste sono fondamentalmente gratuite), semplici refactoring (pass-by-const-reference anziché pass-by-value e simili), caching (che può essere fatto a più livelli, tu Dovrò giudicare dove ha più senso), e qualsiasi cosa possa essere implementata facilmente nel codice che hai già. Si noti che esistono diverse misure ortogonali per "prestazioni", come carico della CPU, latenza, impronta di memoria, ecc .; abbastanza spesso, devi bilanciare uno di quelli contro un altro, ad es. ridurre l'utilizzo della CPU al costo di un maggiore ingombro di memoria. Vedi il commento di Mark Booth per maggiori dettagli. E non dimenticare, a volte (anche se non spesso) "lanciare più hardware" è la risposta corretta.
  • redditività - analizza quali caratteristiche ti fanno guadagnare più denaro e quali parti dell'applicazione sono possibili ostacoli per generare maggiori entrate. Per le applicazioni Web, il tracciamento dei modelli di utilizzo è probabilmente il modo più promettente per farlo. Quindi stimare quanto si dovrebbe spendere in ciascuna parte per risolverlo e in che misura aumenterebbe le entrate. Da lì, dovrebbe essere chiaro quali problemi dovresti prendere prima.
risposta data 18.05.2012 - 13:56
fonte
4

Crea un profilo della tua app e osserva in quali funzioni il tuo codice impiega più tempo, quindi ottimizza le funzioni specifiche. Potresti passare giorni a ottimizzare una funzione solo per scoprire che è chiamata solo un paio di volte, mentre ci sono poche funzioni che vengono chiamate centinaia di volte, queste sono quelle da guardare.

Sostituire oggetti con tipi di dati di basso livello a volte aiuta, inoltre assicurati che nei condizionali vengano valutate per prime le condizioni più probabili.

Prova anche a giocare con le impostazioni di build, come i livelli di ottimizzazione del compilatore, i simboli di debug di rimozione e così via.

    
risposta data 18.05.2012 - 13:43
fonte
2

Se il codice è effettivamente conforme alle aspettative implicite ed esplicite, potrebbe non essere necessario ottimizzarlo del tutto. Il tuo tempo potrebbe essere speso meglio altrove aggiungendo più funzionalità.

Il modo in cui esprimi la tua domanda mi fa pensare che senti che ci sono delle aspettative implicite che non hai comunque pienamente raggiunto con il tuo codice. Forse dovresti verificare prima con il tuo cliente per vedere cosa si aspettano.

Fai attenzione a non entrare nella trappola di placcatura in oro .

Se sei ancora sicuro di voler ottimizzare dopo quanto sopra, quindi segui i consigli di tdammer.

    
risposta data 18.05.2012 - 17:00
fonte
1
code.optimized = users.happyWithPerformance ? true : false;
    
risposta data 18.05.2012 - 16:26
fonte
0

Direi che devi cercare

  1. È abbastanza veloce? Non impiegherei troppo tempo a ridurre il tempo di caricamento della pagina da 1 secondo a 0,1 secondi per un sito che vedrà 50 visitatori al giorno.

  2. Apri la tua soluzione e prova a guardare il tuo codice come se non lo avessi mai visto prima. Ha senso ? Puoi leggerlo e capire cosa fa e perché lo fa? La manutenibilità è la chiave (a meno che non sia un pezzo unico che non si eseguirà mai più)

  3. Se vuoi una misura quantificata in qualche modo migliore, VS (se stai usando .NET) ha uno strumento di analisi del codice, che ti darà un'idea approssimativa della manutenibilità / complessità del codice.

risposta data 18.05.2012 - 17:22
fonte
0

Difficilmente esiste un codice che non possa essere reso più veloce. Poiché questo post mostra , indipendentemente da ciò che fai per velocizzare il codice, lì è quasi sempre qualcosa che potresti fare di più. Questo perché le modifiche che inizialmente non sarebbero state di grande aiuto sono diventate molto più significative dopo che altre fonti di lentezza sono state rimosse.

Da dove viene l'idea che i revisori del codice possano dirti come rendere il codice più veloce? Spesso mi viene chiesto come rendere il codice veloce, ma è come chiedere a un medico di diagnosticare senza esaminare il paziente. Anche il bulbo oculare del codice è di scarsa utilità.

L'abilità fondamentale di ottimizzazione delle prestazioni è diagnosi . Chiunque suggerisca diversamente ti sta dando una WAG. Ecco come lo faccio.

    
risposta data 18.05.2012 - 22:03
fonte

Leggi altre domande sui tag