Problème de performance..... en ILE

RPG (3 et 4, free), CL, SQL, etc...
Répondre
Lagues
Messages : 2
Enregistré le : jeu. 23 avr. 2009, 10:00:30

Problème de performance..... en ILE

Message par Lagues »

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

Lagues
Messages : 2
Enregistré le : jeu. 23 avr. 2009, 10:00:30

(sans texte)

Message par Lagues »

Bonjour,
j'ai résolu le problème en utilisant des pointeurs sur mes ds , au lieu de passer mes tableaux en valeur.
cordialement

Répondre