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 :

Solutions pour lourdeur à l'execution


Sujet :

WinDev

  1. #1
    Membre régulier Avatar de bruce207
    Inscrit en
    Novembre 2007
    Messages
    319
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 319
    Points : 124
    Points
    124
    Par défaut Solutions pour lourdeur à l'execution
    Bonjour,
    je réalise une application de gestion d'un etablissements scolaire et je suis sur la partie bulletin de notes. Le truc c'est que je dois recuperer les notes de chaque eleve dans chaque matiere par classe et je les mets dans un tableau puis je calcule (la moyenne, la note coefficié....), mais le probleme c'est que à l'execution c'est lourd tres lourd la machine met trop de temps pour effctuer le calcul de 5 eleves que j'ai dans la base de données. J'aimerais savoir si quelqu'un a deja eu à realiser une telle application de gestion et comment il a fait ou si quelqu'un a une idée pour alleger cette etape sa solution serait la bienvenue.
    merci

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Salut,

    Il doit y avoir un problème dans ton code.
    Calculer les totaux, moyennes, etc. pour 5 élèves ça doit être "instantané", lecture et affichage compris

  3. #3
    Membre expérimenté Avatar de klbsjpolp
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 065
    Points : 1 322
    Points
    1 322
    Par défaut
    J'ai déjè eu des problèmes de lenteur. Il faut que tu évites d'envoyer trop de requêtes au serveur de base de données. Tu dois utiliser le plus possible les requête et les tables mémoire plutôt que fichier. Si tu peux faire tes calculs avec une requêtes SQL ou une procédure stockée, ça accélère beaucoup les applications. Tu dois aussi éviter de faire des calcul en bouclant sur une table ou un fichier, utilise plutôt une requête.
    «Un problème bien défini est un problème à moitié résolu.»

  4. #4
    Membre régulier Avatar de bruce207
    Inscrit en
    Novembre 2007
    Messages
    319
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 319
    Points : 124
    Points
    124
    Par défaut
    salut
    Voici la portion de code en question
    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
    TANTQUE be <= 2	
    	nSeqL = tabIDSeqL[be]
    // la requete ElevesParClasseL recupere tous les eleves de la classe selectionner ....
    	HExécuteRequête(ElevesParClasseL, hRequêteDéfaut, COMBO_Classe..ValeurMémorisée)
    	HLitPremier(ElevesParClasseL)
    	TANTQUE PAS HEnDehors(ElevesParClasseL)
    		nIdentEL = ElevesParClasseL.idelev
    //MatieresParClasseL recupere toutes les matieres de la classe avec leur coefficient ...
    		HExécuteRequête(MatieresParClasseL, hRequêteDéfaut, COMBO_Classe..ValeurMémorisée)
    		HLitPremier(MatieresParClasseL)
    		sNom = ElevesParClasseL.nomelev
    		TANTQUE PAS HEnDehors(MatieresParClasseL)
    			nIdmatL = MatieresParClasseL.idmat
    //MesnotesL recupere toutes les notes par eleve, par matiere et par classe
    			HExécuteRequête(MesnotesL, hRequêteDéfaut, nIdentEL, MatieresParClasseL.idmat, COMBO_Classe..ValeurMémorisée, nSeqL, gdMdateinf, gdMdatesup)
    //S'il n'y a pas de note enregistrée...			
    SI HNbEnr(MesnotesL) = 0 ALOrs
    				SI k = 1 ALORS
    					gptabMesNotesParSeq[i,1] = 0
    					gptabMesNotesParSeq[i,3] = MatieresParClasseL.libellemat
    					gptabMesNotesParSeq[i,11] = MatieresParClasseL.libellegpm
    					gptabMesNotesParSeq[i, 12] = MatieresParClasseL.nomprof
    					gptabMesNotesParSeq[i,4] = ElevesParClasseL.nomelev
    					gptabMesNotesParSeq[i,15] = ElevesParClasseL.idelev
    					gptabMesNotesParSeq[i, 5] = MatieresParClasseL.coef
    					gptabMesNotesParSeq[i, 6] = 1
    				SINON
    					gptabMesNotesParSeq[i,2] = 0
    					gptabMesNotesParSeq[i,7] = 1
    				FIN
    			SINON
    				HLitPremier(MesnotesL)
    				TANTQUE PAS HEnDehors(MesnotesL)
    					SI k = 1 ALORS
    						m = m + 1
    						rSomN = rSomN + MesnotesL.Note
    						gptabMesNotesParSeq[i,1] = rSomN
    						gptabMesNotesParSeq[i,3] = MatieresParClasseL.libellemat  //Mesnotesl.libellemat
    						gptabMesNotesParSeq[i,11] = MatieresParClasseL.libellegpm
    						gptabMesNotesParSeq[i, 12] = MatieresParClasseL.nomprof
    						gptabMesNotesParSeq[i,4] = ElevesParClasseL.nomelev
    						gptabMesNotesParSeq[i,15] = ElevesParClasseL.idelev
    						gptabMesNotesParSeq[i, 5] = MatieresParClasseL.coef
    						gptabMesNotesParSeq[i, 6] = m
    					SINON
    						l = l + 1
    						rSomN = rSomN + MesnotesL.Note
    						gptabMesNotesParSeq[i,2] = rSomN
    						gptabMesNotesParSeq[i, 7] = l
    					FIN
    					HLitSuivant(MesnotesL)
    				FIN
    			FIN
    			i ++
    			m = 0
    			l = 0
    			rSomN = 0
    			b = 0
    			HLitSuivant(MatieresParClasseL)
    		FIN
    		HLitSuivant(ElevesParClasseL)
    	FIN
    	i = 1
    	k++
    	be++
    FIN
    Je dois aussi dire que j'utilise une base de données externe : MySQL 5.0.27. Je voudrais savoir si c'est parcequ'elle est externe que les fonctions HexecuteRequete() met autant de temps.

  5. #5
    Membre régulier Avatar de bruce207
    Inscrit en
    Novembre 2007
    Messages
    319
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 319
    Points : 124
    Points
    124
    Par défaut
    Je pense que c'est l'accès à la bdd qui alourdi les calculs, parce que j'ai essayé le code avec vb et il est nettement plus rapide. Quelqu'un aurait il une solution pour que je ne change pas d'EDI ?

  6. #6
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Bonjour
    Je travaille beaucoup sur MySql avec des bases de plusieurs millions de lignes et uniquement en sql avec des sqlexec()
    Les performances sont très bonnes même en connexion à distance

    Mais des enchainements de requêtes dans des multiples boucles ça n'aide pas.
    De plus tes requêtes ne sont pas liberées (HAnnuleDeclaration)

    Parfois plutôt que d'accéder de nombreuses fois à un fichier, il vaut mieux le monter en mémoire dans un tableau de structures (ou classes) et faire les recherches sur ce tableau.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 6
    Points
    6
    Par défaut reponse
    Bonjour,

    je pense qu'il serait bien d'utiliser des jointures, c'est fait pour ce que tu veux faire ...

    pour rappel : Where Articles.codearticle = Prix.CodeArticle

  8. #8
    Membre régulier Avatar de bruce207
    Inscrit en
    Novembre 2007
    Messages
    319
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 319
    Points : 124
    Points
    124
    Par défaut
    les jointures je les utilise. Le scoop c'est que j'ai la même lenteur avec les fichiers HyperFile car j'ai convertie ma bdd MySQL. Là vraiment je réfléchi vraiment à changer d'EDI pour mon appli et j'entrevois déjà le boulot de prog qui est réduit avec WinDev. Quelqu'un pour m'aider SVP !

Discussions similaires

  1. Réponses: 21
    Dernier message: 30/08/2004, 17h07
  2. meilleur solution pour créer un document imprimable???
    Par martimacfly dans le forum XML/XSL et SOAP
    Réponses: 26
    Dernier message: 08/07/2004, 10h09
  3. Réponses: 2
    Dernier message: 22/04/2004, 13h28
  4. [Kylix] solution pour kylix3 OE BCB sous mdk 9.2
    Par raggadoll dans le forum EDI
    Réponses: 3
    Dernier message: 28/01/2004, 16h26
  5. [VB6] attendre un événement pour continuer l'exécution
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 21
    Dernier message: 12/11/2002, 13h08

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