2012-12-21 10 views
6

Gibt es eine Art Leistungssteigerung zwischen 'MOVE TO' vs x = y? Ich habe ein wirklich altes Programm, das ich optimiere und würde gerne wissen, ob es sich lohnt, alle MOVE TO herauszuziehen. Andere allgemeine Tipps zur ABAP-Optimierung wären ebenfalls sehr hilfreich.ABAP-Optimierung

Antwort

9

Nein, das ist genau dieselbe Operation, die auf zwei verschiedene Arten ausgedrückt wird. Nichts zu gewinnen. Wenn Sie nach generischen Hinweisen suchen, there's a good book available, die ich Ihnen im Detail empfehlen würde. Wenn Sie ein bestimmtes Programm optimieren müssen, verwenden Sie die Tracing-Werkzeuge (Transaktion SAT in ausreichend aktuellen Releases).

1

Die beiden Aussagen sind equivalent:

" Um den Wert eines Datenobjekts Quelle zu einem variablen Ziel zuzuweisen, verwenden die folgende Anweisung:

MOVE source TO destination. 

oder die äquivalente Anweisung

destination = source. 

"

0

Es ist vor allem für die Konsistenz Zwecke so Ihr Code ist schön bei

aussehen
0

1) Sie sollten vorsichtig sein, während SELECT-Anweisung in ABAP-Sprache. Unnötige Datenbankverbindungen erheblich sinkt die Leistung des ABAP-Programms.

2) Bei Verwendung der internen Tabelle mit Funktionen sollten Sie sie als Referenz verwenden, um die Speichernutzung zu reduzieren.

Aufruf über Referenz: gibt einen Zeiger auf die Speicher location.Changes gemacht auf die Variable innerhalb der Subroutine wirkt sich auf die Variable außerhalb die Subroutine.

3) Sollte keine internen Tabellen mit Arbeitsbereich verwenden.

4) Verwenden Sie bei der Verwendung von verschachtelten Schleifen Sortieralgorithmen.

0

Sie sind die gleichen, wie die ADD Schlüsselwort und + Betreiber.

Wollen Sie Ihre ABAP zu optimieren, habe ich die größten Schuldigen gefunden zu sein: richtig

  • nicht binär-Lookups und/oder (intern) Tabellenschlüssel verwendet wird. Die Syntax von ABAP ist hirntot, wenn es um die Verwendung von Tabellen geht. Know how mit Tabellen effizient zu arbeiten. Grundsätzlich schreiben Sie besser/optimaler/eleganter High-Level-Code. Das ist immer ein Gewinner!

  • Weniger Anweisungen == weniger Zeit. Je weniger Anweisungen Sie auf die schneller drücken, das Programm wird ausgeführt. Dies ist wichtig in engen Schleifen ... Ich weiß, klingt offensichtlich, aber ABAP ist so langsam, dass, wenn Sie wirklich versuchen, kritische Programme zu optimieren, wird dies einen Unterschied machen. (Wir haben Prozesse, die Tage laufen ... und eine Stunde oder so abrasieren macht einen Unterschied!)

  • Keine Typen mischen. Es gibt ein wenig Overhead zu einigen impliziten Konvertierungen ... zum Beispiel, wenn Sie einen string Datentyp initialisieren, dann verwenden Sie die korrekte literale Zeichenfolge mit (Backtick) zitiert: `literal`. Dies gilt auch für das Nachschlagen in Tabellen mit Schlüsseln ... Verwenden Sie exakte Match-Datentypen.

  • Funktionsaufrufe ... Ich kann nicht den Overhead von Funktionsaufrufen genug betonen ... je weniger Sie haben, desto besser. Geht gegen alles, was ein echter Programmierer glaubt, aber da haben Sie es ... ABAP ist ein Sonderfall.

  • Schleife mit ASSIGNING (oder REF TO - etwas langsamer auf bestimmte Typen), vermeiden INTO wie eine Seuche.

PS: Denken Sie auch daran, dass SWITCH Aussagen nur verherrlicht sind IF conditionals ... damit die am häufigsten verwendeten Bedingungen an die Spitze bewegen!

1

Nein, sie sind gleich.

Hier ein paar kurze Hinweise aus meiner langjährigen Leistungssteigerung:

1), wenn Sie move-corresponding wo möglich verwenden, können Sie den Code viel prägnanter, modular und erweiterbar sein (in der fernen Vergangenheit diese war verpönt, aber die technischen Gründe dafür sind in der Regel nicht mehr anwendbar).

2) Verwenden Sie bei jeder Gelegenheit SAT, und stellen Sie sicher, dass die interne Tabellenverfolgung aktiviert ist. Das ist so, als würde man das Licht anmachen oder im Dunkeln über Möbel stolpern.

3) Sorgen Sie dafür, dass die Datenbankschicht so viel Arbeit wie möglich für Sie erledigt. Versuchen Sie, Abfragen möglichst zu kombinieren, insbesondere beim Kombinieren von Ergebnismengen. Zwei Abfragen, die durch einen Join verbunden sind, sind normalerweise viel besser als Wählen Sie> itab> Wählen Sie FÜR ALLE EINTRÄGE.

4) Dies ist ein bisschen fortgeschritten, aber für alle Einträge hat oft viel langsamere Leistung als die entsprechende Auswahl-Optionen IN-Satz. Dies scheint darauf zurückzuführen zu sein, dass letzterer als eine große Abfrage für die Datenbankschicht erstellt wird, während die erstere mehrere Abfragen für die Datenbankschicht erfordert. Der Vorbehalt besteht natürlich darin, dass die generierte Abfrage auf der Datenbankschicht die zulässige Größe auf Ihrem System überschreitet, wenn in Ihren Auswahloptionen zu viele Datensätze vorhanden sind. Innerhalb dieser Einschränkung sind jedoch große Leistungssteigerungen möglich. Im Allgemeinen liebt SAP Select-Optionen.

5) Index, Index, Index!

1

Zunächst beeinflusst Bewegung nicht wirklich viel Leistung.

Was in den Projekten sehr viel beeinflußt für die ich gearbeitet folgt:

  1. Nested Loops (sehr böse). Durchlaufen Sie beispielsweise alle Dokumente und wählen Sie für jedes Dokument einzeln aus, um zu prüfen, ob der Buchungskreis angezeigt werden darf. Erstellen Sie stattdessen eine Liste von Buchungskreisen, konsultieren Sie alle einmal aus db und konsultieren Sie stattdessen diese Ergebnistabelle.

  2. Verwenden Sie nach Möglichkeit Hash- oder sortierte Tabellen.Wenn nicht möglich, verwenden Sie die Standardtabelle, aber sortieren Sie sie nach Schlüsseln und verwenden Sie die "Binärsuche".

  3. Wählen Sie aus DB alle Schlüsselfelder aus. Wenn dies nicht möglich ist, sollten Sie die Erstellung von Indizes in Erwägung ziehen. Verwenden Sie für kleine und einfache Auswahlen Joins. Bei größeren Selektionen funktioniert die Verwendung von Joins zwar immer noch schneller, ist aber schwierig nachzuvollziehen.

  4. Kleinere Sache - verwenden Sie Feldsymbole, um Tabellenzeile zu lesen, das macht es viel schneller.

0

Sie können CDS mit ADT Eclipse erstellen. Oder Ansichten (se11) haben eine gute Leistung zum Auswählen.