Utilizzo di variabili locali vs Esecuzione di chiamate a più funzioni / metodi

0

Ci sono situazioni in cui possiamo memorizzare valori in variabili locali e lavorare con loro. Ad esempio:

String data;
int a, b;

data = Integer.toHexString(memory.read(PC));
a = ("00" + data).substring(data.length());

data = Integer.toHexString(memory.read(PC + 1));
b = ("00" + data).substring(data.length());

O possiamo semplicemente effettuare più chiamate di funzione per ottenere la stessa cosa:

a = ("00" + Integer.toHexString(memory.read(PC))).substring(Integer.toHexString(memory.read(PC)).length());
b = ("00" + Integer.toHexString(memory.read(PC + 1))).substring(Integer.toHexString(memory.read(PC + 1)).length());

Quale è meglio dal punto di vista delle prestazioni?

    
posta Anubhav Das 06.10.2017 - 14:11
fonte

3 risposte

1

Il modo migliore per rispondere alla domanda è di inserire entrambi i frammenti in loop di grandi dimensioni e cronometrarli un paio di volte.

La risposta non scientifica è che è abbastanza improbabile (in Java) che si differenzieranno in prestazioni a parità di altre condizioni. Durante il processo di compilazione, il compilatore probabilmente convertirà comunque le chiamate di metodo non assegnate a assegnazioni a provvisorie. Di conseguenza, i due finiranno per essere identici (più o meno alcune permutazioni di istruzione) e finiranno come codice byte equivalente.

Hai anche C come tag. Siccome questo non è sicuramente il codice C, non posso davvero commentare cosa succederebbe in C. Potresti scrivere in questo modo in C ++, ma la risposta dipenderebbe molto dalla definizione della classe String , tra gli altri, quindi questo non può essere risolto in generale.

    
risposta data 06.10.2017 - 14:51
fonte
3

Vai con la versione più facile da leggere e capire.

Sono d'accordo con la risposta di Alex - è molto improbabile che ci sarà una differenza misurabile nelle prestazioni tra i due versioni.

Tuttavia, anche se c'era una differenza, puoi facilmente perdere tutti questi guadagni mentre l'app non funziona e stai cercando di eseguirne il debug.

    
risposta data 06.10.2017 - 16:02
fonte
1

C'è una differenza di prestazioni. Integer.toHexString (memory.read (_)) viene chiamato 2 volte nel primo esempio e 4 volte nel secondo esempio. Poiché la tua domanda riguardava più il caso generale, se l'utilizzo delle variabili causa la metà delle chiamate e le chiamate sono lente (non in questo caso specifico), può essere il doppio del tempo per utilizzare il primo metodo.

È un gusto personale, ma preferisco che le sotto-espressioni comuni vengano prese in considerazione usando le variabili locali, sia per garantire che abbiano lo stesso valore in tutti i punti a cui si fa riferimento, sia per rendere più chiara la natura comune della sotto-espressione .

    
risposta data 06.10.2017 - 23:15
fonte

Leggi altre domande sui tag