2012-12-21 14 views
6

Esiste un qualche tipo di aumento delle prestazioni tra "SPOSTA A" e x = y? Ho un programma molto vecchio che sto ottimizzando e vorrei sapere se ne vale la pena di tirare fuori tutto il MOVIMENTO. Anche altri suggerimenti generali sull'ottimizzazione ABAP sarebbero grandiosi.Ottimizzazione ABAP

risposta

9

No, è solo la stessa operazione espressa in due modi diversi. Niente da guadagnare lì. Se sei fuori per suggerimenti generici, there's a good book available che ti consiglio di studiare in dettaglio. Se è necessario ottimizzare un programma specifico, utilizzare gli strumenti di tracciamento (transazione SAT in versioni sufficientemente aggiornate).

1

Le due istruzioni sono equivalent:

" Per assegnare il valore di una sorgente oggetto dati in una destinazione variabile, utilizzare la seguente istruzione:

MOVE source TO destination. 

o l'istruzione equivalente

destination = source. 

"

0

E 'principalmente per scopi di consistenza in modo che il codice è piacevole da guardare

0

1) Si dovrebbe fare attenzione durante l'utilizzo di SELECT in linguaggio ABAP. Le connessioni di database non necessarie in modo significativo diminuiscono le prestazioni del programma ABAP.

2) Durante l'utilizzo tabella interna con le funzioni si dovrebbe chiamare per riferimento per ridurre l'utilizzo della memoria.

chiamata per riferimento: passa un puntatore alla memoria location.Changes apportate alla variabile all'interno della subroutine influenza la variabile fuori subroutine.

3) Non utilizzare tabelle interne con area di lavoro.

4) Durante l'uso dei cicli nidificati , utilizzare gli algoritmi di ordinamento.

0

Essi sono gli stessi, così come la parola chiave ADD e + operatore.

Se si desidera ottimizzare il vostro ABAP, ho trovato più grandi colpevoli di essere:

  • Non usando le ricerche binari e/o chiavi (interna) della tabella correttamente. La sintassi di ABAP è cerebrale quando si tratta di utilizzare la tabella. Sapere come lavorare con le tabelle in modo efficiente. Fondamentalmente scrivi codice di alto livello migliore/ottimale/elegante. Questo è sempre un vincitore!

  • Meno istruzioni == meno tempo. Con il minor numero di istruzioni che si preme su , il programma verrà eseguito più rapidamente. Questo è importante nei loop stretti ... I so che questo sembra ovvio, ma ABAP è così lento, che se si è veramente cercando di ottimizzare i programmi critici, questo farà la differenza. (Abbiamo processi in esecuzione giorni ... e la rasatura di un'ora o più fa la differenza!)

  • Non mescolare i tipi. C'è un po 'di overhead per alcune conversioni implicite ... ad esempio se si sta inizializzando un tipo di dati string, quindi si utilizza la stringa letterale corretta con le virgolette (backtick): `literal`. Ciò vale anche per cercare nelle tabelle utilizzando le chiavi ... utilizzare i tipi di dati di corrispondenza esatta.

  • Chiamate di funzione ... Non riesco a sottolineare il sovraccarico delle chiamate di funzione abbastanza ... meno avete il meglio. Va contro qualsiasi cosa un vero programmatore di computer crede, ma ce l'hai ... ABAP è un caso speciale .

  • Loop utilizzando ASSIGNING (o REF TO - leggermente più lenta su alcuni tipi ), evita nella come la peste.

PS: Anche tenere a mente che SWITCH dichiarazioni sono solo glorificato IF condizionali ... così si muovono le condizioni più comuni al top!

1

No, sono uguali.

Ecco un paio suggerimenti rapidi dai miei anni di miglioramento delle prestazioni:

1) se si utilizza Move-corrispondente, se possibile, il codice può essere molto più conciso, modulare, ed estensibile (nel lontano passato questo era disapprovato, ma le ragioni tecniche per questo non sono generalmente più applicabili).

2) Utilizzare SAT in ogni occasione e accertarsi di attivare il tracciamento della tabella interna. È come accendere le luci contro l'inciampare sui mobili nell'oscurità.

3) Fare in modo che il livello del database faccia il maggior lavoro possibile. Cerca di combinare le query laddove possibile, soprattutto quando si combinano i set di risultati. Due query collegate da un join sono in genere molto meglio di selezionare> itab> selezionare PER TUTTE LE VOCI.

4) Questo è un po 'avanzato, ma PER TUTTI I RICORDI spesso ha prestazioni molto più lente rispetto alle equivalenti opzioni di selezione IN. Ciò sembra essere dovuto al fatto che quest'ultimo è stato creato come una grande query per il livello del database mentre il primo richiede più spostamenti nel livello del database. L'avvertenza, ovviamente, è che se si hanno troppi record nelle opzioni di selezione, la query generata sul livello del database supererà le dimensioni consentite sul proprio sistema, ma all'interno di tale limite sono possibili notevoli miglioramenti delle prestazioni. In generale, SAP ama solo le opzioni di selezione.

5) Indice, indice, indice!

1

Prima di tutto la mossa non influisce molto sulle prestazioni.

Quello che sta interessando un bel po 'nei progetti ho lavorato è la seguente:

  1. cicli annidati (molto male). Ad esempio, esegui il ciclo di tutti i documenti e, per ogni documento, seleziona il singolo per verificare che sia consentito visualizzare il codice dell'azienda. Invece, fai una lista di codici aziendali, consultali tutti una volta da db e consulta invece questa tabella dei risultati.

  2. Utilizzare le tabelle hash o ordinate laddove possibile.Dove non è possibile, utilizzare la tabella standard, ma ordinarla con le chiavi e utilizzare "ricerca binaria".

  3. Selezionare dal DB tutti i campi chiave. Se non è possibile, prendere in considerazione la creazione di indici. Per selezioni piccole e semplici, utilizzare join. Per le selezioni più grandi, l'utilizzo dei join continuerà a funzionare più rapidamente, ma sarebbe difficile da seguire.

  4. Minore: utilizzare i simboli di campo per leggere la riga della tabella, questo lo rende molto più veloce.

0

È possibile creare CD con ADT Eclipse. O le viste (se11) hanno buone prestazioni per la selezione.