[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    @varchar oder char: selbstredend geht das auch mit char. Das ist ein prototyped call, der nicht einmal exportiert wird, wo ist da das Problem (RTFM)

    @Speicherverbrauch: in Deinem Beispiel geht es um lokale Variablen und die sind automatic storage, werden also zur Laufzeit allokiert und leben bis zum Ende der Prozedur. Physilaisch werden sie vom Heap des Prozesses geholt und da zählt nur die maximale Größe => Platz kostet das also nur bei denen. die zum Maximum beitragen (Rekursion, tief verschachtelte Procedures jeweils mit viele automatic storage) das kostet allenfalls Zeit zum allokieren und initialisieren des Speichers.

    @Speicherverbrauch: Bei der Copy Strecke kommt es wieder drauf an, wo die drin steckt. Wenn die im globalen Teil des Moduls steckt und man gleichzeitig ein krummes Modul Design hat (z.B.: viele ein procedure Module) und auch noch mit den Activationgroups krause Dinge veranstaltet, dann kriegt man da vielleicht Probleme hin. Problemkandidaten sind auch statische Riesenarrays, die kosten Zeit und Platz, was noch schlechter ist.

    Resumee: bei Beachtung einiger weniger einfacher Grundregeln im modularen Design ist Speicherplatz kein Faktor um den man sich besonders kümmern müsste. Vernünftig eingesetzt ist es besser der Büchse ein wenig mehr Speicher zu gönnen und ihn bei der Programmierung sinnig einzusetzen. Ansonsten gilt: wo kein Problem feststellbar ist (Laufzeit, Skalierbarkeit) versucht man auch nicht das nicht vorhandene Problem zu lösen.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  2. #2
    Registriert seit
    Jan 2012
    Beiträge
    1.199
    Erstmal Danke für die vielen Antworten und Tipps. Meine konkrete Frage, ob die beiden Procedures unterschiedlich viel Hauptspeicher (temporär natürlich, eben solange die Routine läuft) benötigen, konnte scheinbar niemand beantworten. Ist wahrscheinlich auch gar nicht so einfach.
    Ich entnehme dem ganzen aber, dass Speicher durch lokale Variablen kein besonderes Problem darstellen sollte, da er ja immer nur kurz gebraucht und dann wieder freigegeben wird. Also brauchen wir da nicht zu knausern.

    Dieter

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Auch bei Returnwerten ist das eher unkritisch da sie auf dem Stack angelegt und nach der Zuweisung wieder verworfen werden.
    Sicherlich muss ein "Return Wert" das Ergebnis auf dem Stack ablegen.
    Da lokale Variablen im automatischen Speicher liegen muss dieser Wert ja "gerettet werden" um nach oben weitergegeben und wieder zerstört zu werden.
    In obigem Bespiel ist der Effekt eigentlich egal, da in beiden Fällen identischer Platz verbraten wird.
    Ein "Return Var1 + Var2" legt ein Zwischenergebnis an, das dann durch den Return wieder kopiert werden muss. Das Zwischenergebnis kann man natürlich auch selber anlegen und der Return kopiert dieses dann wieder.

    Sehr große Zwischenergebnisse bewegen auch tatsächlich viele Bytes und zwar unabhängig davon, ob bei Varlen-Feldern alles gebraucht wird oder nicht.
    Der Type Varlen (egal ob SQL oder RPG) wird nur durch Laufzeitroutinen und nicht native durch MI unterstützt.
    Das Feld wird nämlich immer bis am Ende mit Leerzeichen aufgefüllt!
    Dies kann man sehr schön im Debugger sehen (X-Ausgabe) oder in COBOL.
    Nach der Zuweisung eines kurzen Wertes in die Variable, die vorher länger gefüllt war wird der Rest des Feldes tatsächlich initialisiert!
    In COBOL wird tatsächlich eine Struktur mit der Länge (4-Byte COMP-4) und dem Inhalt definiert. COBOL unterstützt den Typ nicht native, man muss das Feld füllen und die Länge anschließend selber ausrechnen. Genau dies macht die Runtime von SQL und RPGLE.
    CHAR-Felder sind also auch schneller als VARCHAR-Felder.

    Man sollte sich also schon überlegen, ob Routinen dieser Art vielleicht besser die Ergebnisfelder exportieren und somit statisch anlegen. Jeder Caller ist für die schnelle Entsorgung des Ergebnis sowieso verantwortlich und Returnwerte mit 16MB sollten sowieso vermieden werden.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von dschroeder Beitrag anzeigen
    Meine konkrete Frage, ob die beiden Procedures unterschiedlich viel Hauptspeicher (temporär natürlich, eben solange die Routine läuft) benötigen, konnte scheinbar niemand beantworten. Ist wahrscheinlich auch gar nicht so einfach.
    ... selbstverständlich lässt sich diese Frage leicht beantworten, das ist nämlich elementar: das braucht automatic storage, schmälert also das Weihnachtsgeld, wenn man danach bezahlt wird; ob sich das auf den Speicherverbrauch des Jobs insgesamt auswirkt, hängt von den anderen Programmen in der Historie des Jobs ab. Das kann man sich so vorstellen, dass es egal ist, ob ich bei meínem Bierglas einen halben Liter nachfüllen lasse, wenn es leer ist, oder einen viertel, solange das erste Glas, das ich bestellt habe, ein Liter Fassunsgvermögen hatte!

    Na denn Prost

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    Registriert seit
    Jan 2012
    Beiträge
    1.199
    Nochmal vielen Dank für alle Antworten.
    (Weihnachtsgeld gab es glücklicherweise bereits. Deshalb können wir den Speicher jetzt voll ausschöpfen.)
    Dieter

Similar Threads

  1. Prüfung ob CL durch Rdi gedebugged wird
    By Etherion in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 03-09-14, 11:04
  2. OPNQRYF im RPG-Programm durch SQL ersetzen
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 18-05-14, 16:26
  3. IBM Galaxy Unterstützung durch Tools von PKS
    By Kirsten Steer in forum Archiv NEWSblibs
    Antworten: 0
    Letzter Beitrag: 17-10-02, 08:59
  4. Sortieren durch ein Datumsformat
    By Newbie in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 04-07-02, 08:19
  5. Speicherüberlauf durch Riesenspoolfile
    By Kent in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 19-06-01, 10:45

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •