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 :

Lenteur requête par programmation [WD16]


Sujet :

WinDev

  1. #1
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut Lenteur requête par programmation
    Bonsoir,

    J'ai, ce soir, un soucis de lenteur avec une requête toute bête (REQ_Recup_CP) qui doit me renvoyer 90 000 enregistrements environ avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HExécuteRequête(REQ_Recup_CP)
    POUR TOUT REQ_Recup_CP
    	Trace(REQ_Recup_CP.Code_Postal)
    FIN
    Il faut près de 14 secondes pour que ma trace contienne tout le contenu de la requête, contre 2/3 secondes avec la même requête lancée depuis WDMAP...

    Je n'utilise pas le bon code ?

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 217
    Points : 487
    Points
    487
    Par défaut
    Bonjour,

    La fonction Trace est très consommatrice, je pense que cela vient de là.

    Cordialement

    Madsl@nD

  3. #3
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Effectivement cela viens du Trace dans mon code mais je viens de faire d'autres tests.

    Ce code placé dans l'initialisation d'une fenetre interne lancée directement fonctionne rapidement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ListeSupprimeTout(FI_Auditeurs.COMBO_Auditeurs_Code_Postal)
    TableSupprimeTout(FI_Auditeurs.COMBO_Auditeurs_Commune)
     
    HExécuteRequête(REQ_Code_Postaux_Communes)
    POUR TOUT REQ_Code_Postaux_Communes
    	ListeAjoute(FI_Auditeurs.COMBO_Auditeurs_Code_Postal, REQ_Code_Postaux_Communes.Code_Postal)
    	TableAjouteLigne(FI_Auditeurs.COMBO_Auditeurs_Commune, REQ_Code_Postaux_Communes.Code_Postal, REQ_Code_Postaux_Communes.Commune)
    FIN
    HLibèreRequête(REQ_Code_Postaux_Communes)

    Mais depuis une fenêtre "normale", le code met 7 sec... Il y a t'il des choses qui rentre en compte ?

    EDIT : Il faut que le code soit bien dans la partie Initialisation de la fenêtre et non dans la partie Déclaration globales...

    EDIT 2: Je viens de m'apercevoir d'un joli bug !

    Si par exemple, mon champ fenêtre interne est sur le plan 2 de ma fenêtre principale, il faut déjà afficher ce plan avant d'effectuer la requête car sinon çà prends une plombe en temps !!! Si le plan est affiché avant hop ! c'est rapide...

  4. #4
    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
    Citation Envoyé par WDKyle Voir le message
    Effectivement cela viens du Trace dans mon code mais je viens de faire d'autres tests.

    Ce code placé dans l'initialisation d'une fenetre interne lancée directement fonctionne rapidement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ListeSupprimeTout(FI_Auditeurs.COMBO_Auditeurs_Code_Postal)
    TableSupprimeTout(FI_Auditeurs.COMBO_Auditeurs_Commune)
     
    HExécuteRequête(REQ_Code_Postaux_Communes)
    POUR TOUT REQ_Code_Postaux_Communes
    	ListeAjoute(FI_Auditeurs.COMBO_Auditeurs_Code_Postal, REQ_Code_Postaux_Communes.Code_Postal)
    	TableAjouteLigne(FI_Auditeurs.COMBO_Auditeurs_Commune, REQ_Code_Postaux_Communes.Code_Postal, REQ_Code_Postaux_Communes.Commune)
    FIN
    HLibèreRequête(REQ_Code_Postaux_Communes)

    Mais depuis une fenêtre "normale", le code met 7 sec... Il y a t'il des choses qui rentre en compte ?

    EDIT : Il faut que le code soit bien dans la partie Initialisation de la fenêtre et non dans la partie Déclaration globales...

    EDIT 2: Je viens de m'apercevoir d'un joli bug !

    Si par exemple, mon champ fenêtre interne est sur le plan 2 de ma fenêtre principale, il faut déjà afficher ce plan avant d'effectuer la requête car sinon çà prends une plombe en temps !!! Si le plan est affiché avant hop ! c'est rapide...
    Ça serait bien que tu saches la part de temps pris par le HExécuteRequête() et celui du POUR TOUT pour savoir où se situe le gain potentiel...

    Si c'est la requête qui consomme beaucoup de temps, il faudrait que tu nous montres le code SQL pour qu'on puisse donner un avis. En 1er lieu assure toi qu'il ne manque pas des index...

    Après si c'est le POUR TOUT qui plombe, avant la boucle fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FI_Auditeurs.COMBO_Auditeurs_Commune..AffichageActif = Faux
    puis après la boucle tu rétablis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FI_Auditeurs.COMBO_Auditeurs_Commune..AffichageActif = Vrai
    Je ne l'ai jamais testé sur le remplissage de COMBO mais peut-être que ça fait aussi un gain de temps...
    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.

  5. #5
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    La requête est très rapide, 2 millisecondes.

    Je testerais ton idée avec AffichageActif mais je ne sais pas si cela va fonctionner car le POUR TOUT prend du temps juste quand on est pas sur le bon plan...

  6. #6
    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,

    tu pourrai aussi remplir un tableau ou une chaine et affecter directement le contenu de ton tableau ou de ta chaine à la liste pour supprimer les lenteurs d'affichage.

    BD

  7. #7
    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
    Tu peux faire un essai avec FichierVersTableMémoire()...
    dans la mesure où les colonnes de la requête correspondes aux colonnes de la table
    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.

  8. #8
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    J'ai testé avec AffichageActif et pour 10 000 enregistrements j’obtiens 3 à 4 secondes en temps d’exécution, c'est correct ?

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

Discussions similaires

  1. Lenteur remplissage table par programmation (C/S)
    Par Phoenix311 dans le forum WinDev
    Réponses: 5
    Dernier message: 04/04/2014, 08h30
  2. Escamoter la barre Windows par programme
    Par Invité dans le forum Windows
    Réponses: 4
    Dernier message: 01/06/2004, 16h03
  3. [Foxpro]Connexion ODBC par programme
    Par Richard MORRISSEY dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 07/07/2003, 21h55
  4. Enregistrement du son par programme
    Par Invité dans le forum C++Builder
    Réponses: 3
    Dernier message: 10/06/2003, 23h13
  5. Comment créer un nouveau dossier par programmation ?
    Par annecyrond dans le forum Langage
    Réponses: 3
    Dernier message: 27/03/2003, 07h59

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