Code: Alles auswählen.
LEAVE TO SCREEN '0'.
Ich ermittle alle Globalen Variablen des Programms und lese den Speicherverbrauch mit cl_abap_memory_utilities=>get_memory_size_of_object aus.black_adept hat geschrieben: ↑19.05.2020 11:01Wie und über welche Daten ermittelst du den aktuellen Speicherverbrauch?
Das ist leider nicht möglich, weil ich nicht an den Rechner drankomme und im Testsystem ein entsprechendes Beispiel zu konstruieren nicht möglich ist.DeathAndPain hat geschrieben: ↑19.05.2020 12:07Interne Tabellen kann man auch anders checken. Du könntest das Programm einfach mal debuggen, wenn es langsam geworden ist. Dann schaust Du Dir im Debugger an, wieviele Einträge eure internen Tabellen jeweils haben (einfach die am Anfang mit DATA definierten internen Tabellen durchgehen und schauen, ob da Ausreißer mit unrealistisch hoher Zeilenzahl dabei sind). Oder Du gehst mal eine Zeitlang mit F5 und F6 durch und schaust, ob Du Befehle oder Codeblöcke (Unterroutinen) finden kannst, bei denen der Zeitverlust auftritt. Möglicherweise ist die Zahl der Einträge ja auch im Rahmen (dessen, was programmtechnisch benötigt wird), aber die Programmierung ist schlampig old-fashioned, alles mit Standardtabellen und sequentieller Suche? Dann wäre die richtige Lösung relativ offensichtlich.
Danke nochmal für den Hinweis. Ist auch so implementiert, war nur von mir falsch ausgedrückt.DeathAndPain hat geschrieben: ↑19.05.2020 12:07Bei "LEAVE SCREEN." aufpassen: Damit beendet man nicht einen CALL SCREEN! Wenn ihr also abwechselnd CALL SCREEN und LEAVE SCREEN macht, dann wird der entsprechende Stapel immer größer, logisch. Um nach einem CALL SCREEN wieder ordnungsgemäß hinter den CALL SCREEN zurückzukehren und den Stackeintrag wieder abzubauen, muss es
lauten.Code: Alles auswählen.
LEAVE TO SCREEN '0'.
Nachher ist es keine globale interne Tabelle, sondern eine, die in irgendeiner Unterroutine mit dem Befehl STATICS deklariert wurde... 😁Ich ermittle alle Globalen Variablen des Programms und lese den Speicherverbrauch mit cl_abap_memory_utilities=>get_memory_size_of_object aus.
Tja, das ist dann wohl ein Fall von "Wasch mich, aber mach mich nicht nass": Du sollst das Problem lösen, aber man will Dir dazu keine Debug-ohne-Replace-Rechte einräumen. Aus meiner Sicht muss da von Deiner Seite die Reaktion kommen, dass Du das Problem nicht beseitigen kannst, wenn man Dir nicht die Möglichkeit einräumt, es auf geeignete Weise zu analysieren.Das ist leider nicht möglich, weil ich nicht an den Rechner drankomme und im Testsystem ein entsprechendes Beispiel zu konstruieren nicht möglich ist.