Il confine tra "ottimizzazione" e "design sensibile" è a volte abbastanza buono, ma altre volte piuttosto ovvio. Per esempio, non hai bisogno di un profiler per essere sicuro che se stai ordinando alcuni milioni di elementi, vale la pena usare un algoritmo O (N log N) piuttosto che un O (N 2 ) algoritmo. IMO, che semplicemente rientra nella ragionevolezza ragionevole, non nell'ottimizzazione però.
Ci sono anche alcune cose che potresti fare, semplicemente perché potrebbero fornire un vantaggio, e il costo è minimo inesistente. Per usare l'esempio di @ unholysampler, scrivere ++i
invece di i++
potrebbe avere un costo minimo se si è abituati a digitarlo come post-incremento, ma (al massimo) è temporaneo e banale. Non passerei certo tempo a riscrivere il codice di lavoro per il possibile salvataggio di un nanosecondo, a meno che il profiler non abbia dimostrato che veramente abbiamo avuto bisogno di quel tempo, e ho avuto una ragionevole possibilità di salvarlo. Allo stesso tempo, quando sto digitando un nuovo codice, lavorerei abitualmente usando il modulo che probabilmente è migliore, perché una volta che lo fai abitualmente è gratis. Spesso non guadagna nulla e anche quando fa la differenza spesso non sarà abbastanza grande da notare o preoccuparsi - ma è ancora gratuito, quindi non c'è motivo non per farlo .
Casi come quelli sono abbastanza ovvi, e nella mia mente cadrebbe davvero sotto un design sensibile piuttosto che ciò che penserei sia davvero un'ottimizzazione. La maggior parte degli altri casi di "ottimizzazione senza rappresentazione" sarebbe tuttavia molto più difficile da giustificare. Se hai intenzione di dedicare tempo o sforzi significativi all'ottimizzazione, dovresti avere qualcosa di molto più solido di un "istinto" per giustificarlo.
Dovrei aggiungere quella parte del motivo per cui dico che ritengo che il codice di profilazione sia estremamente utile, anche quando il tuo obiettivo non è l'ottimizzazione. Un profiler fornisce una panoramica di alto livello di un pezzo di codice che può essere estremamente utile anche quando non ti interessa affatto l'ottimizzazione. Ad esempio, se vedi 10 volte il numero di chiamate per allocare una risorsa in modo da liberare quel tipo di risorsa, è un buon indizio che ci sia un vero problema, anche se il codice sembra funzionare correttamente. Quando ci si apprende, un sacco di codice ha un sacco di cose che dovrebbero combaciare (non necessariamente 1: 1, ma in un modo o nell'altro) e un profiler può mostrare discrepanze come quella molto più rapidamente della maggior parte degli altri strumenti.