PDA

View Full Version : Unterfrogramm mir Return verlassen



Seiten : [1] 2

peter.kinne
08-06-05, 12:17
Hallo zusammen.

ich habe zwei Programme, nennen wir sie mal PGM_A und PGM_B.

In PGM_A werden sequentiell ca. 1.000.000 Sätze gelesen und mit jedem Satz das Programm PGM_B aufgerufen. Die Laufzeiten sind sehr schlecht. Nun habe ich PGM_B modifiziert. Alle Tabellen werden USROPEN geöffnet. Dieses erfolgt in der *INZSR. Mit einem Flag sollte es nur einmalig erfolgen. Das Programm an sich wird nicht mehr mit LR sondern mit Return verlassen. Ich hatte mir vorgestellt, dass durch das Öffnen und Schließen der Tabellen eine Menge Zeit gespart wird.

Wenn ich mir den Job nun anschaue, der im BATCH läuft, sehe ich aber, das die Tabellen mal auf und mal zu sind.

Wie kann ich das Programm im Speicher halten und vor allem, wie kann ich die Tabllen offen halten ?

Danke für Tipps,

Peter Kinne

Stefan12
08-06-05, 12:28
Hallo Peter,

ich glaube, das Problem ist das *USROPN in PGM_B:
Wenn du mit Return in einem Programm zurück gehst, bleiben die Dateien offen.
du hast ihn, glaube ich, mit dem *Usropn ausgetrickst.

Stefan

JonnyRico
08-06-05, 12:35
Falls ILE in Frage kommt, kannst du vielleicht aus dem Schreiben in die Tabellen in PGM_B eine Prozedur machen, die du in PGM_A aufrust. Ein CALLP sollte um einiges schneller sein als ein normaler CALL.

Gruß

Sascha

Fuerchau
08-06-05, 12:39
Das hat mit Return und USROPN nix zu tun !

Ist LR=*ON werden alle Dateien geschlossen, ist *LR=*OFF bleiben sie offen.

Fuerchau
08-06-05, 12:43
@Jonny

Der CALL einer Prozedur mit CALLP oder ein OPM-Call unterscheidet sich in der Laufzeit kaum, da bei Programminit alle Zeiger auf evtl. Call's initialisiert werden und somit nur unwesentlich langsamer als ein EXSR ist.
Wenn dem nicht so wäre, hätte die AS ganz schön Schwierigkeiten, da ALLE DB-Funktionen (SQL und Native) und viele Runtime-Funktionen per OPM-CALL aufgerufen werden !!

kuempi von stein
08-06-05, 12:55
hello,

da muss ich doch auch noch meinen senf dazu geben...

Als Knackpunkt sehe ich die exakte Datei-Positionierung in Programm B und dann das sofortige Ende (sprich nicht bis zum Ende weiterlesen) wenn die Arbeit getan ist.

Man glaubt gar nicht, wieviel man da an Laufzeiten sparen kann....

kuempi

peter.kinne
08-06-05, 12:57
Das hat mit Return und USROPN nix zu tun !

Ist LR=*ON werden alle Dateien geschlossen, ist *LR=*OFF bleiben sie offen.

Alle Tabelle in PGM_B stehen auf USROPN und werden in der *INZSR geöffnet. In dem Programm gibt es kein *INLR sondern nur RETURN.

Trotzdem sehe ich bei WRKJOB nicht immer alle Files. Bin mir deshalb nicht sicher, ob es klappt, was ich mir vorgestellt habe.

Peter

Fuerchau
08-06-05, 12:59
Da es denn ILE ist dann mit ACTGRP(*CALLER) erstellen.

peter.kinne
08-06-05, 13:00
hello,

da muss ich doch auch noch meinen senf dazu geben...

Als Knackpunkt sehe ich die exakte Datei-Positionierung in Programm B und dann das sofortige Ende (sprich nicht bis zum Ende weiterlesen) wenn die Arbeit getan ist.

Man glaubt gar nicht, wieviel man da an Laufzeiten sparen kann....

kuempi

Das ist hier kein Problem, weil PGM_B f gezielte CHAINS macht

RobertMack
08-06-05, 13:26
Hallo Peter,

ich verfahre in solchen Fällen so:

----------------------------

PGM_A:
CALL PGM_B PARM MODUS " "
...
...
SETON LR
CALL PGM_B PARM MODUS "E"

----------------------------

PGM_B:
kein USROPN
*ENTRY PLIST, PARM MODUS
...
...
MODUS IFEQ "E"
SETON LR
ELSE
RETRN
ENDIF

Achtung: *INZSR würde in PGM_B nur einmal ausgeführt,
ansonsten bleibt alles offen, d.h. Sätze MÜSSEN immer durch Update, Setgt oder Unlck freigegeben werden

Gruß,
Robert