Hi 4byte,4byte hat geschrieben:Hey cuncon,
ich gehe mal davon aus, dass deine itab eine Standard Tabelle ist, d.h. sie wird in beiden Fällen eh linear durchsucht, egal ob mit loop oder mit read. Ein Perfomancevorteil durch READ TABLE bekommst du durch den Zusatz BINARY SEARCH(Wenn die Tabelle davor sortiert wurde. Sonst ist das Ergebnis )
Ein Vergleich mit 'CS' usw. ist in READ Anweisungen nicht möglich soweit ich weiß.
Ich nehme bei großen ITAB, über die ich loopen muss um Daten zu ändern, gerne Feldsymbole.(Allgemein verwende ich gerne Feldsymbole )
Grüße 4byte
cuncon hat geschrieben: Wird es schneller als LOOP AT?
cuncon
Ein bisschen ist er kürzercuncon hat geschrieben: Auf jeden Fall ist der Code kürzer.
cuncon
der Code ist nicht nur kürzer, auch bei Debuggen auch viel kürzer (weil ich die Schleife nicht mehr durchführen muss). Nur ich weiß nicht ob der Befehl FIND schneller als LOOP AT ist.4byte hat geschrieben:Hey Cuncon,
cuncon hat geschrieben: Wird es schneller als LOOP AT?
cuncon
das weiß ich leider nicht. Ich habe die Anweisung bis jetzt nicht mal gekannt
Ein bisschen ist er kürzercuncon hat geschrieben: Auf jeden Fall ist der Code kürzer.
cuncon
Schreib doch einen Testreport für beide Möglichkeiten und lasse es durch die TA SE30 / SAT laufen, dann siehst du vll welche Möglichkeit schneller ist.
(Aber bitte mit vielen Einträgen in der ITAB )
Oder vll weiß jemand aus dem Forum die Antwort ???
Grüße 4byte
Sorry, ich habe gerade gemerkt, dass man den Befehl LOOP AT durch FIND nicht ersetzen kann, weil man am Ende anderes Ergebnis bekommt. Bei LOOP AT kann man die gefundene Zeile abfangen, aber bei FIND nichtcuncon hat geschrieben:der Code ist nicht nur kürzer, auch bei Debuggen auch viel kürzer (weil ich die Schleife nicht mehr durchführen muss). Nur ich weiß nicht ob der Befehl FIND schneller als LOOP AT ist.4byte hat geschrieben:Hey Cuncon,
cuncon hat geschrieben: Wird es schneller als LOOP AT?
cuncon
das weiß ich leider nicht. Ich habe die Anweisung bis jetzt nicht mal gekannt
Ein bisschen ist er kürzercuncon hat geschrieben: Auf jeden Fall ist der Code kürzer.
cuncon
Schreib doch einen Testreport für beide Möglichkeiten und lasse es durch die TA SE30 / SAT laufen, dann siehst du vll welche Möglichkeit schneller ist.
(Aber bitte mit vielen Einträgen in der ITAB )
Oder vll weiß jemand aus dem Forum die Antwort ???
Grüße 4byte
cuncon
was willst du denn jetzt eigentlich machen? Sollen Einträge nur gefunden werden? Sollen die Einträge bearbeitet werden wenn sie gefunden werden?? Mit Find hast du die indexe der gefundenen Zeilen. Danach kannst du dann ein Read Table machen. Aber das macht doch kein Sinn. Dann kannst du gleich über die Tabelle mit einer Where Bediengung loopen. Als Arbeitsbereich nimmst du ein Feldymbol und weißt dem Feldsymbol den neuen Wert zu. Dadruch spart man sich auch das Modify und schnell ist es auch nochcuncon hat geschrieben:
Sorry, ich habe gerade gemerkt, dass man den Befehl LOOP AT durch FIND nicht ersetzen kann, weil man am Ende anderes Ergebnis bekommt. Bei LOOP AT kann man die gefundene Zeile abfangen, aber bei FIND nicht
cuncon
NEIN! Nur wenn man den KEY auch sinnvoll verwenden kann.ralf.wenzel hat geschrieben:Grundsätzlich wird ein LOOP schneller, wenn du mit sortierten Tabellen arbeitest
Naja, das setze ich jetzt mal voraus. Alles, was nicht sinnvoll verwendet wird, ist nicht sinnvoll.Daniel hat geschrieben:NEIN! Nur wenn man den KEY auch sinnvoll verwenden kann.ralf.wenzel hat geschrieben:Grundsätzlich wird ein LOOP schneller, wenn du mit sortierten Tabellen arbeitest
Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
cuncon
Das habe ich ja geschrieben, dass CS dem Vorhaben entgegenwirkt. Aber grundsätzlich (also in den meisten Fällen) beschleunigt das Zugriffe.Daniel hat geschrieben:Damit scheidet "Grundsätzlich" aus.
Hier wird nach dem Vorkommen von Zeichen gesucht.
Dabei hilft ein Key nicht.
Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
cuncon
Danke, du hast recht. Ich werde die Loop mit WHERE Bedingung einbauen und auch FIELD-Symbold benutzen. Es kann schneller gehen.Daniel hat geschrieben:In den meisten Fällen wird ein LOOP ohne Bedingung ausgeführt.
Da beschleunigt nix.
Nein, in einer Standardtabelle geht ein LOOP AT WHERE nicht schneller als ein LOOP AT, weil alle Sätze sequentiell durchlaufen werden (das wurde auch schon geschrieben). Darum verwende ich sie nicht (oder nur in begründeten Ausnahmefällen). LOOP AT WHERE bringt nur was bei Schlüsselzugriffen.cuncon hat geschrieben:Danke, du hast recht. Ich werde die Loop mit WHERE Bedingung einbauen und auch FIELD-Symbold benutzen. Es kann schneller gehen.Daniel hat geschrieben:In den meisten Fällen wird ein LOOP ohne Bedingung ausgeführt.
Da beschleunigt nix.