Problème de performance..... en ILE
Posté : ven. 30 avr. 2010, 12:09:09
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
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