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