IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

temps de traitement XML [WD17]


Sujet :

WinDev

  1. #1
    Membre du Club
    Homme Profil pro
    de
    Inscrit en
    Décembre 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : de
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 62
    Points : 46
    Points
    46
    Par défaut temps de traitement XML
    Bonjour,

    Je travaille sur les prélévements sepa et j'ai besoin de créer un fichier XML.
    J'ai un fichier de 230000 enregistrements à traités. Pour les 10000 premiers j'ai mis 3 minutes pour les traités. pour traiter les 10000 entre 80000 et 90000,j'ai mis 53 minutes. pour traiter les 10000 entre 1300000 et 140000 ,j'ai mis 86 minutes.pour traiter les 10000 entre 1700000 et 180000 ,j'ai mis 115 minutes. J'ai l'impression que c'est un probléme de mémoire.Quelqu'un a t'il une solution pour régler ce probléme?

    Je remercie d'avance la personne qui me donnera la réponse.

    Cordialement

  2. #2
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    Il se peut que se soit un problème de libération de ressource.
    Merci de nous donner le code utiliser pour le traitement afin que l'on voit si ça vient de là.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  3. #3
    Membre éprouvé

    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    402
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 402
    Points : 915
    Points
    915
    Par défaut
    Bonjour
    Je suis tout à fait de l'avis de mail.spam
    si tu utilise un xmldocument et que tu lis un fichier xml
    ton objet xmldocument "gonfle" à chaque lecture
    c'est certainement ce qui te ralentis.
    il faut que tu réinitialise completement ton objet ou que tu supprime les membres que tu as déjà traité.
    BD

  4. #4
    Membre du Club
    Homme Profil pro
    de
    Inscrit en
    Décembre 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : de
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 62
    Points : 46
    Points
    46
    Par défaut code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    // Résumé : Créé le fichier XML Prélévement SEPA PAIN.008.001.02 
    // / Syntaxe :
    //creationxml (<repfichie>, <codret2>)
    //
    		// Paramètres :
    //	repfichie : <indiquez ici le rôle de repfichie>
    //	codret2 : <indiquez ici le rôle de ret>
    // Valeur de retour :
    // 	Aucune
    //
    // Exemple :
    // Exemple :
    // Exemple :
    // Indiquez ici un exemple d'utilisation.
    //
    PROCEDURE creationxml(repfichie,codret2)                
     
    prevXML est un xmlDocument, description="Pain.008.001.02.xsd"
    N est un entier = 1 
    N1 est un entier = 1 
    nBre est entier 
    nBre1 est un entier 
    Res1 est un booléen
    res2 est un booléen
    droitech est un chaîne 
    clepar est une chaîne
    Datech est une  chaîne UNICODE
    dAtjour est une Date   
    hEurjour est une Heure
    heurjour1 est une chaîne     
    Topmajm est une chaîne    
    Topmaji est une chaîne
    Topmajib est une chaîne
    Topmajin est une chaîne     
    Topmajs est une chaîne      
    Ancinomcre est une chaîne
    anciban est une chaîne  
    Pancrum est une chaîne
    Pancics est une chaîne
    sRepfichie1 est une chaîne 
    sRepfichier2 est une chaîne 
    nSN1 est un entier   
    rMontent est un réel
    rMontlot est un réel
     
    // Chargement du contenu XML
    HExécuteRequête(REQ_totdet)
    Res1=HLitPremier(REQ_totdet)
    res2=HLitPremier(Typentete)
    // mise en place entéte
    //datech = DateVersChaîne(DateSys(),"AAAA-MM-JJ")+"T"+HeureVersChaîne(HeureSys(),"hh:mm:ss")
    rMontent = Arrondi(REQ_totdet.la_somme_Montprel,2)
    dAtjour = DateSys()
    hEurjour =HeureVersChaîne(HeureSys(),"hhmmss")
    heurjour1 =Gauche(hEurjour,6)
    Datech = DateVersChaîne(DateSys(),"AAAAMMJJ")+heurjour1
    //Info(datjour,hEurjour,heurjour1,datech)
    prevXML.Document.CstmrDrctDbtInitn.GrpHdr.MsgId="HHHH"
    //prevXML.Document.CstmrDrctDbtInitn.GrpHdr.CreDtTm=DateVersChaîne(DateSys(),"AAAAMMJJ") +HeureVersChaîne(HeureSys(),"HHMMSS") 
    //prevXML.Document.CstmrDrctDbtInitn.GrpHdr.CreDtTm=DateVersChaîne(DateSys(),"AAAAMMJJ")+ hEurjour1
    prevXML.Document.CstmrDrctDbtInitn.GrpHdr.CreDtTm=Datech
    //nfo(prevXML.Document.CstmrDrctDbtInitn.GrpHdr.CreDtTm)
    prevXML.Document.CstmrDrctDbtInitn.GrpHdr.NbOfTxs= REQ_totdet.Comptage_1
    prevXML.Document.CstmrDrctDbtInitn.GrpHdr.CtrlSum = rMontent
    prevXML.Document.CstmrDrctDbtInitn.GrpHdr.InitgPty.Nm= Typentete.Nomcreancier
     
    HLibèreRequête(REQ_totdet)
     
    HExécuteRequête(REQ_totlot)
    Res1=HLitPremier(REQ_totlot,REQ_totlot.Nomfichier,REQ_totlot.typeseq)
    TANTQUE HEnDehors(REQ_totlot) = Faux
    	// mise en place lot
    	prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].PmtInfId = "REMIS1"
    	prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].PmtMtd = "DD" 
    	prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].BtchBookg = "false"
    	prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].NbOfTxs = REQ_totlot.nbrelot
    	rMontlot = Arrondi(REQ_totlot.Totmontlotl,2)
    	prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].CtrlSum = rMontlot
    	prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].PmtTpInf.SvcLvl.Cd="SEPA"
     	prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].PmtTpInf.LclInstrm.Cd="CORE"
    	prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].PmtTpInf.SeqTp = REQ_totlot.typeseq
    	prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].ReqdColltnDt = DateVersChaîne(Typentete.Dateech,"AAAAMMJJ")
    	prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].Cdtr.Nm = Typentete.Nomcreancier
    	prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].CdtrAcct.Id.IBAN=  Gauche(Typentete.Iban,27)
    	droitech = Droite(Typentete.Bic,3) 
    	SI droitech = "   " 
      	   prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].CdtrAgt.FinInstnId.BIC = Gauche(Typentete.Bic,8)
    	    ELSE 
    	   prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].CdtrAgt.FinInstnId.BIC = Typentete.Bic 
       FIN   
    	prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].ChrgBr = "SLEV"
    	prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].CdtrSchmeId.Id.PrvtId.Othr.Id = Typentete.Ics 
    	prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].CdtrSchmeId.Id.PrvtId.Othr.SchmeNm.Prtry= "SEPA"
    	clepar = HFiltreIdentique(Typdetail,Nomfichiertypeseq,REQ_totlot.Nomfichier,REQ_totlot.typeseq)
    	HLitPremier(Typdetail, clepar)
    	N1 = 1
    	TANTQUE PAS HEnDehors()
     	    nBre = nBre + 1 
     		nBre1 = modulo(nBre,10000)
     		SI nBre1 = 0 ALORS
     	      memoira()
     	     gsGtoparch = "OK "
     		 creatarch("chgt",nBre, "   ",DateSys() + HeureSys(),"201001010")   
     		FIN
    		// mise en place transaction
    		prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].PmtId.EndToEndId = Typdetail.Libecomp
    		prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].InstdAmt:Ccy = "EUR"
    		prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].InstdAmt = Typdetail.Montprel
    		prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DrctDbtTx.MndtRltdInf.MndtId = Typdetail.Rumd
    		prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DrctDbtTx.MndtRltdInf.DtOfSgntr = DateVersChaîne(Typdetail.Datesignd,"AAAAMMJJ")
     		Topmaji  = " " 
     		Topmajin = "  "   
     		Topmajm  = " " 
     		Topmajib = " " 
     		Topmajs  = " " 
    		Pancrum = Typdetail.AncienRum
    		Pancics = Typentete.ancics
    		 //		info(Typentete.ancics,"     ",Typdetail.AncienRum)
    // 		modifpain008(Typentete.Ics,Typdetail.Rumd,Typdetail.Iban,Pancics,Pancrum,Typentete.Nomcreancier,ancinomcre,anciban,topmajm,topmaji,topmajin,Topmajib,Topmajs) 
     		SI Topmaji = "OK" OU Topmajib = "OK" OU  Topmajm = "OK" OU Topmajs = "OK" OU Topmajin = "OK" ALORS 
     			 prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DrctDbtTx.MndtRltdInf.AmdmntInd = "true"
     		FIN
     		SI Topmajm = "OK" ALORS
     			prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DrctDbtTx.MndtRltdInf.AmdmntInfDtls.OrgnlMndtId = Typdetail.AncienRum
     		FIN
    		SI Topmajin = "OK" ALORS
    			prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DrctDbtTx.MndtRltdInf.AmdmntInfDtls.OrgnlCdtrSchmeId.Nm = Ancinomcre
    		FIN
    		SI Topmaji = "OK" ALORS
    			prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DrctDbtTx.MndtRltdInf.AmdmntInfDtls.OrgnlCdtrSchmeId.Id.PrvtId.Othr.Id= Typentete.ancics
    		    prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DrctDbtTx.MndtRltdInf.AmdmntInfDtls.OrgnlCdtrSchmeId.Id.PrvtId.Othr.SchmeNm.Prtry= "SEPA"
    		FIN
    		SI Topmajib = "OK" ALORS
    			prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DrctDbtTx.MndtRltdInf.AmdmntInfDtls.OrgnlDbtrAcct.Id.IBAN=Gauche(anciban,27)
    		FIN
    		SI Topmajs = "OK" ALORS
    			prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DrctDbtTx.MndtRltdInf.AmdmntInfDtls.OrgnlDbtrAgt.FinInstnId.Othr.Id = "SMNDA"
    		FIN
        	droitech = Droite(Typdetail.Bic,3)
     		SI droitech = "   " 
               prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DbtrAgt.FinInstnId.BIC = Gauche(Typdetail.Bic,8)                                                
     		ELSE 
     			prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DbtrAgt.FinInstnId.BIC = Typdetail.Bic 
     		FIN   
    		prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].Dbtr.Nm = Typdetail.Nomdebiteur
    		prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DbtrAcct.Id.IBAN=Gauche(Typdetail.Iban,27)
    //		creatarch(Typentete.Ics,Typdetail.Rumd,Typdetail.Iban,Typentete.Nomcreancier,Typdetail.Datesignd) 
     
    		HLitSuivant(Typdetail, clepar)
    		N1 = N1 + 1
    	FIN
    	N = N + 1 
    	HLitSuivant(REQ_totlot,REQ_totlot.Nomfichier,REQ_totlot.typeseq)
    FIN
     
    HLibèreRequête(REQ_totlot)
    // Enregistrement du fichier XML
    sRepfichie1 = Droite(repfichie,3)
    nSN1 = PositionOccurrence(repfichie,sRepfichie1, 1)
    nSN1 = nSN1 - 1
    sRepfichier2 = Milieu(repfichie,1,nSN1) + "XML" 
    gsGtoparch = "OK "
    creatarch("sauv",nBre, "   ",DateSys() + HeureSys(),"201001010") 
    XMLSauve(prevXML,sRepfichier2,xvSansValidation)
    gsGtoparch = "OK "
    creatarch("fsauv",nBre, "   ",DateSys() + HeureSys(),"201001010") 
    // edition() 
    codret2 = "OK"
    j'ai ajouter une procédure Memoira pour récupérer de la mémoire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    PROCEDURE memoira()
    nHDL est entier 
    RetourFonction est un entier
     
     
    SI SysVersionWindows(sysVersionPlateForme)="NT" ALORS
    	nHDL=API("Kernel32","GetCurrentProcess")
    	RetourFonction=API("psapi","EmptyWorkingSet",nHDL)
    	SI RetourFonction = 0 ALORS Erreur(ErreurInfo()) ; RETOUR
    FIN
     
    SI SysVersionWindows(sysVersionPlateForme)="XP	" ALORS
    	nHDL=API("Kernel32","GetCurrentProcess")
    	RetourFonction=API("psapi","EmptyWorkingSet",nHDL)
    	SI RetourFonction = 0 ALORS Erreur(ErreurInfo()) ; RETOUR
    FIN
    Merci d'avance de vos réponses

    Cordialement

  5. #5
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    Il existe une option "hSansRafraîchir" dans la fonction HLitPremier.
    Regarde si tu peux l'appliquer dans ton contexte.
    Mais je ne sais pas si ça va améliorer ton temps de traitement.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  6. #6
    Membre du Club
    Homme Profil pro
    de
    Inscrit en
    Décembre 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : de
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 62
    Points : 46
    Points
    46
    Par défaut
    Bonjour,


    ceci n'améliore pas le temps de traitement.

    Cordialement

  7. #7
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 178
    Points : 416
    Points
    416
    Par défaut
    Bonjour,

    Avez-vous essayez de lancer l'analyseur de performances (sous menu projet) pour identifier quelles instructions consomment le plus de ressources ?

    Autre point, dans votre exemple vous exécutez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    clepar = HFiltreIdentique(Typdetail,Nomfichiertypeseq,REQ_totlot.Nomfichier,REQ_totlot.typeseq)
    pour chaque ligne de REQ_totlot. Je ne connais pas les performances de cette fonction mais à priori comme ça, ça me rassure pas, le fichier filtré contient-il beaucoup d'enregistrements ?

  8. #8
    Membre du Club
    Homme Profil pro
    de
    Inscrit en
    Décembre 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : de
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 62
    Points : 46
    Points
    46
    Par défaut pbs de temps
    Bonjour

    voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
     
    N est un entier = 0
    N1           est un entier = 0 
    	nBre         est un entier 
    	nBre1        est un entier 
    	Res1         est un booléen
    	res2         est un booléen
    	droitech     est une chaîne 
    	clepar       est une chaîne
    	Datech       est une chaîne 
    Topmajm      est une chaîne    
    Topmaji      est une chaîne
    Topmajib     est une chaîne
    Topmajin     est une chaîne     
    Topmajs      est une chaîne      
    Ancinomcre   est une chaîne
    anciban      est une chaîne  
    Pancrum      est une chaîne
    Pancics      est une chaîne
    sRepfichie1  est une chaîne 
    sRepfichier2 est une chaîne 
    nSN1         est un entier   
    rMontent     est un réel
    rMontlot     est un réel
    sMggif       est une chaîne
    nbmaj        est un entier 
     
     
     
    	//xmltot:sonlot = allouer un tableau dynamique de 20 chaînes
    	//tlot:slot = allouer un tableau dynamique de 2000000 chaînes 
     
    	// Chargement du contenu XML
    	HExécuteRequête(REQ_totdet)
    	res1=HLitPremier(REQ_totdet)
    	res2=HLitPremier(Typentete)
    	prevXML est un xmlDocument,description= "Pain.008.001.02.xsd"
     
    	// mise en place entéte
     
     
    	rMontent = Arrondi(REQ_totdet.la_somme_Montprel,2)
     
     
    	 sMggif = Milieu(Typentete.Numctr,1,3) + HeureVersChaîne(HeureSys(),"HHMMSS")
     
         Datech = DateVersChaîne(DateSys(),"AAAA-MM-JJ")+"T"+HeureVersChaîne(HeureSys(),"HH:MM:SS")
     
     
    	prevXML.Document.CstmrDrctDbtInitn.GrpHdr.MsgId=sMggif
     
    	prevXML.Document.CstmrDrctDbtInitn.GrpHdr.CreDtTm=Datech
     
    	prevXML.Document.CstmrDrctDbtInitn.GrpHdr.NbOfTxs= REQ_totdet.Comptage_1
     
    	prevXML.Document.CstmrDrctDbtInitn.GrpHdr.CtrlSum = rMontent
     
    	prevXML.Document.CstmrDrctDbtInitn.GrpHdr.InitgPty.Nm= Typentete.Nomcreancier
     
    	HLibèreRequête(REQ_totdet)
     
     
    	HExécuteRequête(REQ_totlot)
    	Res1=HLitPremier(REQ_totlot,REQ_totlot.Nomfichier,REQ_totlot.typeseq)
    	TANTQUE HEnDehors(REQ_totlot) = Faux
    		N = N + 1  
    		// mise en place lot
    	    prevXML.document.CstmrDrctDbtInitn.PmtInf[N].PmtInfId = Typentete.Reférence
     
    	    prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].PmtMtd = "DD" 
     
    	    prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].BtchBookG = "false"
     
    		prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].NbOfTxs = REQ_totlot.nbrelot
     
    		rMontlot = Arrondi(REQ_totlot.Totmontlotl,2)
    		prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].CtrlSum = rMontlot
     
    		prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].PmtTpInf.SvcLvl.Cd="SEPA"
     
    	    prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].PmtTpInf.LclInstrm.Cd="CORE"
     
    	 	prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].PmtTpInf.SeqTp = REQ_totlot.typeseq
     
    		prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].ReqdColltnDt = DateVersChaîne(Typentete.Dateech,"AAAAMMJJ")
     
    	    prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].Cdtr.Nm = Typentete.Nomcreancier
     
    		prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].CdtrAcct.id.IBAN=  Gauche(Typentete.Iban,27)
     
    		droitech = Droite(Typentete.Bic,3) 
    		SI droitech = "   " 
    	  		prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].CdtrAgt.FinInstnId.BIC = Gauche(Typentete.Bic,8)
    		    SINON
    		 	prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].CdtrAgt.FinInstnId.BIC = Typentete.Bic 
    	   FIN   
    	 	prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].ChrgBr = "SLEV"
     
    		prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].CdtrSchmeId.Id.PrvtId.Othr.Id = Typentete.Ics 
     
    		prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].CdtrSchmeId.Id.PrvtId.Othr.SchmeNm.Prtry= "SEPA"
     
     
    		clepar = HFiltreIdentique(Typdetail,Nomfichiertypeseq,REQ_totlot.Nomfichier,REQ_totlot.typeseq)
    		HLitPremier(Typdetail, CléPar,hSansRafraîchir)
    		N1 = 0
    		TANTQUE PAS HEnDehors()
    			nbmaj = 0 
    			N1 = N1 + 1
    		    nbre = nbre + 1 
    	 		nBre1 = modulo(nBre,10000)
    	 		SI nbre1 = 0 ALORS
    	 	      memoira()
    	 	     gsGtoparch = "OK "
    	 		 creatarch("chgt",Nbre, "   ",DateSys() + HeureSys(),"201001010")   
    	 		FIN
    			// mise en place transaction
    	  		prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].PmtId.EndToEndID = Typdetail.Libecomp
    			prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].InstdAmt:Ccy = "EUR"
    			prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].InstdAmt = Typdetail.Montprel
    			prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DrctDbtTx.MndtRltdInf.MndtId = Typdetail.Rumd
    			prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DrctDbtTx.MndtRltdInf.DtOfSgntr = Typdetail.Datesignd
    	  		topmaji  = " " 
    	 		Topmajin = "  "   
    	 		topmajm  = " " 
    	 		topmajib = " " 
    	 		Topmajs  = " " 
    			Pancrum = Typdetail.AncienRum
    			Pancics = Typentete.ancics
    			Ancinomcre = Typentete.anciennomcrean
    			anciban = Typdetail.ancieniban
    			 //		info(Typentete.ancicis,"     ",Typdetail.AncienRum)
     
    	 		Modifpain008(Typentete.Ics,Typdetail.Rumd,Typdetail.Iban,Pancics,Pancrum,Typentete.Nomcreancier,ancinomcre,anciban,topmajm,topmaji,topmajin,Topmajib,Topmajs) 
    	 		SI Topmaji = "OK" OU Topmajib = "OK" OU  Topmajm = "OK" OU Topmajs = "OK" OU topmajin = "OK" ALORS
    	 			prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DrctDbtTx.MndtRltdInf.AmdmntInd = "true"
    	        FIN
     
    	 		SI Topmajm = "OK" ALORS
    	 			prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DrctDbtTx.MndtRltdInf.AmdmntInfdtls.OrgnlMndtID = Typdetail.AncienRum
    	 		FIN
     
    			SI TopmajIn = "OK" ALORS
    				prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DrctDbtTx.MndtRltdInf.AmdmntInfdtls.OrgnlCdtrSchmeId.Nm = Ancinomcre
    			FIN
     
    			SI Topmaji = "OK" ALORS
    				prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DrctDbtTx.MndtRltdInf.AmdmntInfdtls.OrgnlCdtrSchmeId.Id.PrvtId.Othr.Id= Typentete.ancics
    	  			prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DrctDbtTx.MndtRltdInf.AmdmntInfdtls.OrgnlCdtrSchmeId.Id.PrvtId.Othr.SchmeNm.Prtry= "SEPA"
    			FIN
    			SI Topmajib = "OK" ALORS
    			prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DrctDbtTx.MndtRltdInf.AmdmntInfdtls.OrgnlDbtrAcct.Id.IBAN=Gauche(anciban,27)
    			FIN
     
    			SI Topmajs = "OK" ALORS
    				prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DrctDbtTx.MndtRltdInf.AmdmntInfdtls.OrgnlDbtrAgt.FinInstnId.Othr.Id = "SMNDA"
    			FIN
     
    	    	droitech = Droite(Typdetail.Bic,3)
    	 		SI droitech = "   " ALORS
    	 		    prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DbtrAgt.FinInstnId.BIC = Gauche(Typdetail.Bic,8)                                                
    				SINON
    			    prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DbtrAgt.FinInstnId.BIC = Typdetail.Bic 
    	 		FIN   
     
    	 		prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].Dbtr.Nm = Typdetail.Nomdebiteur
     
    			prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].DbtrAcct.Id.IBAN=Gauche(Typdetail.Iban,27)
     
    	        SI Milieu(Typdetail.librepiq,1,1) <> " " ALORS
    	        	prevXML.Document.CstmrDrctDbtInitn.PmtInf[N].DrctDbtTxInf[N1].RmtInf.Ustrd = Typdetail.librepiq
    	        FIN	
     
    	        HLitSuivant(Typdetail, CléPar)
     
    		FIN 
     
    		HLitSuivant(REQ_totlot,REQ_totlot.Nomfichier,REQ_totlot.typeseq)
    	FIN
     
    	HLibèreRequête(REQ_totlot)
    	// Enregistrement du fichier XML
     
    	sRepfichie1 = Droite(repfichie,3)
    	nSN1 = PositionOccurrence(repfichie,sRepfichie1, 1)
    	nSN1 = nSN1 - 1
    	sRepfichier2 = Milieu(repfichie,1,nSN1) + "XML" 
    	gsGtoparch = "OK "
    	creatarch("sauv",Nbre, "   ",DateSys() + HeureSys(),"201001010") 
    	XMLSauve(prevXML,sRepfichier2,xvSansValidation)
    	gsGtoparch = "OK "
    	creatarch("fsauv",Nbre, "   ",DateSys() + HeureSys(),"201001010") 
    	// edition() 
    	codret2 = "OK"
    plus je traite d'enregistement plus le temps par 10000 enregistrements augmente
    TRT Nombre date/heure heure duree cumul
    DEBUT lCHFIC 20130603/14430311 144303
    DEBUT CHGT XML 20130603/14442246 144422 1 1
    chgt 10000 20130603/14445695 144456 1 2
    chgt 20000 20130603/14474023 114740 3 5
    chgt 30000 20130603/14533982 145339 6 11
    chgt 40000 20130603/15021458 150214 9 20
    chgt 50000 20130603/15131489 151314 11 31
    chgt 60000 20130603/15263789 152637 13 43
    chgt 70000 20130603/15422347 154223 16 59
    chgt 80000 20130603/16003234 160032 18 77
    chgt 90000 20130603/16210637 162106 21 98
    chgt 100000 20130603/16440955 164409 23 121
    chgt 110000 20130603/17093573 170935 27 148
    chgt 120000 20130603/17372743 173727 28 176
    chgt 130000 20130603/18074462 180744 30 206
    chgt 140000 20130603/18402479 184024 33 239
    chgt 150000 20130603/19152826 191528 35 274
    chgt 160000 20130603/19525454 195254 37 311
    Je n'arrive pas a comprendre pourquoi.
    meric d'avance de vos réponses.

    Cordialement

  9. #9
    R&B
    R&B est déconnecté
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2005
    Messages : 571
    Points : 1 263
    Points
    1 263
    Par défaut
    Bonjour

    Voici une procédure à boucles imbriquées avec un rapport nbtraitement/temps qui semble croitre de manière non linéraire.

    POur identifier votre problème je vous invite :
    1- à éviter les allocation mémoire dans les boucles afin d'éviter les fuites de mémoire
    2- masquer partiellement votre code pour ne pas effectuer tel ou tel traitement afin d'isoler celui qui ralentit la chose... afin d'isoler et comprendre de quoi il s'agit.
    Il s'agit souvent d'un positionnement ou d'une recherche toujours plus long dans une liste (je pense à votre XML) que vous remplissez précisément à mesure du traitement.

    C'est alors qu'il va vous falloir trouver une parade (genre enregistrer un identifiant des lignes écrites dans un tableau mémoire... pour les retrouver plus vite qu'en reparcourant le fichier sur disque à chaque occurrence)... ou des fois simplement prendre le problème à l'envers (pour diminuer les temps, on obtient souvent des résultats improbables), ce peut être en dédoublonnant le fichier par la suite ou que sais-je.

    En tout cas, nous poster votre code et qui plus est directement la tartine de cet exemple ne donne pas beaucoup envie... d'où mon indication pour isoler le problème.

  10. #10
    Membre expert
    Avatar de Emmanuel Lecoester
    Profil pro
    Inscrit en
    Février 2003
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2003
    Messages : 1 493
    Points : 3 266
    Points
    3 266
    Par défaut
    je pense que l'analyseur sert dans ces cas là. Non ?
    Emmanuel Lecoester
    => joomla addict.

  11. #11
    Membre du Club
    Homme Profil pro
    de
    Inscrit en
    Décembre 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : de
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 62
    Points : 46
    Points
    46
    Par défaut reponse
    Bonjour,

    j'ai passé l'ananyseur. est c'est le chargement du fichier XML qui prends du temps.
    1) probléme de mémoire
    2) probléme de contrôle du fichier XML
    cordialement

    Bruno Crinon

  12. #12
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    HLitPremier() consomme beaucoup de temps...
    En l’occurrence la ligne
    HLitPremier(Typdetail, clepar,hSansRafraîchir)
    Va être répétée autant de fois que la requête va retourner de lignes. Je penses que c'est là que ça plombe la performance...

    Ne peux-tu pas modifier ta requête REQ_totdet pour qu'elle te ramène également les rubriques de Typdetail dont tu as besoin ?

    Ainsi tu n'auras qu'une seule requête à exécuter et une seule boucle... le gain devrait être important...

    Sinon dit nous en plus sur l'analyse qui concerne les fichiers et rubriques impliqués dans la requête REQ_totdet et le fichier Typdetail... je présent qu'il y a vraiment quelque chose à faire de ce côté là...
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  13. #13
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Ne serait-il pas préférable, avant de chercher des solutions, de s'assurer d'ou vient le problème ?

    Le problème peut se situer soit lors de la lecture des fichiers (requête, boucle) soit lors de la constitution du xml (problème de mémoire ou mauvaise gestion de windev des xmlDocument très volumineux).

    Le plus simple est de découper le problème en sous problème et d'isoler le ralentissement. D'abord on parcours les tables sans créer le xml et déjà on regarde si ceci est ok.

    P.S.: Personnellement, pour créer un gros fichier XML, je ne serais pas passer par xmlDocument, j'aurais directement écrit les données par des accès au fichier .xml sous format texte (fOuvre, fEcrit, fFerme)
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  14. #14
    Membre du Club
    Homme Profil pro
    de
    Inscrit en
    Décembre 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : de
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 62
    Points : 46
    Points
    46
    Par défaut reponse
    Le probléme était que je travaillais en mémoire et que je traitais 200000 enregistrements. depuis que je travaille avec xmlajoutefils je n'ai plus de probléme de performance. c'est un peu plus contraignant. C'est tout.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] Temps de traitement ... affichage de page
    Par mathieu77186 dans le forum Langage
    Réponses: 37
    Dernier message: 25/10/2005, 17h45
  2. [MySql] temps de traitement interminable
    Par LE NEINDRE dans le forum Requêtes
    Réponses: 8
    Dernier message: 08/07/2005, 15h14
  3. traitement XML
    Par skaii dans le forum MFC
    Réponses: 7
    Dernier message: 24/05/2005, 18h19
  4. [Perf]Utilisation des Logger et temps de traitement ?
    Par elitost dans le forum Logging
    Réponses: 6
    Dernier message: 12/04/2005, 23h13
  5. optimisation de temps de traitement xml/xslt
    Par Erwy dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/05/2004, 16h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo