Das stimmt schon, aber der Inhalt der Klammer von LINE_EXISTS ist ja nichts anderes als eine Tabellensuche im 7.40-Format, und Tabellen, in denen ich jemals suche, sind bei mir immer sortiert oder gehasht. Vor allem war ich bei dieser Klasse ja angetreten, den Funktionsbaustein zu optimieren, habe mir also gezielt über jede einzelne Anweisung noch mal besonders Gedanken gemacht und Messungen angestellt. Nur so bin ich ja zufällig über den Programmierfehler gestolpert, den man sonst nie bemerken würde, da er außer der erhöhten Laufzeit (die immer noch im Rahmen liegt) keine Auswirkungen hat.
Ich war der Meinung, dass ich durch meine Überlegungen und Umstrukturierungen nochmal zusätzlich Performance rausholen könnte und war enttäuscht, dass ich ohne den Bug (der sich ja auch in dem alten FB mühelos fixen ließe) noch nicht mal die Laufzeit des alten Programms einhalten konnte - und das, obwohl ich bekannte Performancevorteile genutzt habe wie LOOP ASSIGNING statt INTO, LINE_EXISTS statt READ TABLE oder auch das von mir selbst mal entdeckte Detail, dass sortierte Tabellen dann und nur dann insgesamt schneller sind als gehashte, wenn alle Tabellenfelder Bestandteil des Tabellenschlüssels sind.
Die alten Syntaxen mögen nicht schön sein, aber von der Performance her sind sie kaum zu schlagen, insbesondere nicht mit 7.40-Code. Dieser wurde entwickelt, die Optik der Programme zu verbessern und leistet dabei auch Großartiges, aber performancetechnisch ist er mit dem alten Code nicht ganz auf Augenhöhe. Verständlich, da auf heutiger Hardware die Prioritäten andere sind, aber auch schade, weil das nach meiner Überzeugung problemlos hätte erreichbar sein sollen. Der LINE_EXISTS ist dabei noch die positive Ausnahme, da er mit dem, was er tut, tatsächlich jede alte Syntax von der Geschwindigkeit her schlägt. Aber Konstrukte wie VALUE, FOR und COND, so schön sie sein mögen, verlieren in der Messung gegen herkömmliche LOOPs etc.
Gerne würde ich meine Klasse mit dem optimierten Code hier zum Besten geben, aber da es sich ja nur um überarbeiteten SAP-Standardcode aus dem Funktionsbaustein handelt, würde ich dabei vermutlich eine Copyrightverletzung riskieren.