j'ai un problème de perf quand je fais appel ou non à une procédure.
quand je lance le pgm suivant, les perfs sont bonnes:
H option(*srcstmt : *nodebugio)
H BNDDIR('EXTRALIAGE':'QC2LE') ACTGRP(*CALLER) DFTACTGRP(*NO)
Ffic1 p IF E K DISK
F RENAME(fic1:fic1f)
d WorkDonnees ds inz
D WorkCanetF like(canet) dim(12)
D WorkCanetL like(canet) dim(12)
D WorkCanetM like(canet) dim(12)
D WorkPdsnet like(pdsnet)dim(12)
D WorkQtefac like(Qtefac) dim(12)
D WorkTendCAM 1
D WorkTendPds 1
D WorkTendQte 1
d DArticl ds Qualified dim(1500) inz
D CodeA like(cdart)
D LcodeA 100
D DonA likeds(Workdonnees) dim(3)
D TendCAA 1
D TendCATMA 1
D TendPdsA 1
D TendQteA 1
d DArticlD ds Qualified dim(1500) inz
D CodeAD like(cdart)
D LcodeAD 100
D DonAD likeds(Workdonnees) dim(2)
D TArticle S dim(500) like(cdart)
D WCdart S inz like(Cdart)
D Pos S 10i 0 inz
/free
setll ('01 ' : 'xxxxx' : 20070401) fic1;
reade ('01 ' : 'xxxxx' ) fic1;
DOW NOT %EOF;
if datfac >= 20070401;
IF datfac <= 20100331;
Wcdart= cdart;
pos = %lookup(wcdart : TArticle);
if pos = 0;
pos = %lookup(*blanks : TArticle);
if pos <> 0
and pos <= 500;
TArticle(pos) = wcdart;
dArticl(pos).CodeA = wcdart;
dArticlD(pos).CodeAD = wcdart;
ENDIF;
ENDIF;
else;
leave;
endif;
endif;
reade ('01 ' : 'xxxxxx' ) fic1;
enddo;
*inlr = '1';
/end-free
Par contre qd je fais appel à une procedure(ChoiceARticleM dans un programme de service) qui fait le meme traitement, c'est la cata de la cata:
H option(*srcstmt : *nodebugio)
H BNDDIR('EXTRALIAGE':'QC2LE') ACTGRP(*CALLER) DFTACTGRP(*NO)
Ffic1 p IF E K DISK
F RENAME(fic1:fic1f)
* -------------------------------------------------------------
* - Prototype pour la procedure ChoiceArticleM
* -------------------------------------------------------------
/Define Copy_ChoiceArticleM_Prototype
/Define Copy_ChoiceArticleM_Fields
/Copy *libl/Qrpglesrc,SrcopyTv5
/UnDefine Copy_ChoiceArticleM_Fields
/UnDefine Copy_ChoiceArticleM_Prototype
d WorkDonnees ds inz
D WorkCanetF like(canet) dim(12)
D WorkCanetL like(canet) dim(12)
D WorkCanetM like(canet) dim(12)
D WorkPdsnet like(pdsnet)dim(12)
D WorkQtefac like(Qtefac) dim(12)
D WorkTendCAM 1
D WorkTendPds 1
D WorkTendQte 1
d DArticl ds Qualified dim(1500) inz
D CodeA like(cdart)
D LcodeA 100
D DonA likeds(Workdonnees) dim(3)
D TendCAA 1
D TendCATMA 1
D TendPdsA 1
D TendQteA 1
d DArticlD ds Qualified dim(1500) inz
D CodeAD like(cdart)
D LcodeAD 100
D DonAD likeds(Workdonnees) dim(2)
D TArticle S dim(500) like(cdart)
D WCdart S inz like(Cdart)
D Pos S 10i 0 inz
/free
setll ('01 ' : 'xxxxx' : 20070401) fic1;
reade ('01 ' : 'xxxxx' ) fic1;
DOW NOT %EOF;
if datfac >= 20070401;
IF datfac <= 20100331;
Wcdart= cdart;
ChoiceArticleM(Wcdart : DArticl : Darticld : TArticle);
else;
leave;
endif;
endif;
reade ('01 ' : '350118' ) fic1;
enddo;
*inlr = '1';
/end-free
et le traitememt de la proc et le meme que le pgm du début:
/free
tArticle = tArticlep;
DArticl = dArticlp;
DArticld = DArticldp;
pos = %lookup(wcdart : TArticle);
if pos = 0;
pos = %lookup(*blanks : TArticle);
if pos <> 0
and pos <= 500;
TArticle(pos) = wcdart;
dArticl(pos).CodeA = wcdart;
dArticlD(pos).CodeAD = wcdart;
ENDIF;
ENDIF;
tArticlep = tArticle;
DArticlp = dArticl;
DArticldp = DArticld;
return;
/end-free
c'est peu etre le chargement des tableaux?
merci pour votre aide
Problème de performance..... en ILE
(sans texte)
Bonjour,
j'ai résolu le problème en utilisant des pointeurs sur mes ds , au lieu de passer mes tableaux en valeur.
cordialement
j'ai résolu le problème en utilisant des pointeurs sur mes ds , au lieu de passer mes tableaux en valeur.
cordialement