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 :

Traitement plus long avec taches parallèles [WD25]


Sujet :

WinDev

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Août 2009
    Messages : 97
    Points : 59
    Points
    59
    Par défaut Traitement plus long avec taches parallèles
    Bonjour,

    J'ai un traitement qui remplit un tableau d'une structure.
    A chaque nouvelle ligne ajoutée dans ce tableau, je lance une procédure de calcul avec une tache parallèle grâce à TâcheParallèleExécute().
    Cette procédure de calcul réalise aussi des requêtes SQL avec des FichierVersTableau().

    Cependant, avec les taches parallèles, mon traitement met 1 seconde de plus à s'exécuter au lieu d'un traitement séquentiel.

    Avez-vous une idée pourquoi ?

  2. #2
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 467
    Points : 806
    Points
    806
    Par défaut
    Est il possible d'avoir un exemple du code ?

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    La gestion des traitements en parallèle a un coût, et se pose aussi la problématique des accès concurrents aux ressources.
    Donc il n'est pas toujours valable de faire des traitements en parallèle.

    Il faut décortiquer les données renvoyées par l'analyseur de performance pour voir où "ça coince".

    Tatayo.

  4. #4
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 806
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 806
    Points : 5 254
    Points
    5 254
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Citation Envoyé par tatayo Voir le message
    Il faut décortiquer les données renvoyées par l'analyseur de performance pour voir où "ça coince".
    Entre autre l'accès au serveur. Si le RSO est pourri ou surchargé, le problème ne vient pas de la fonction TâcheParallèleExécute.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 393
    Points
    9 393
    Par défaut
    A chaque nouvelle ligne ajoutée dans ce tableau (N lignes), tu lances une procédure de calcul avec une requête SQL.

    ça commence mal.
    Tu as certainement la possibilité de lancer une seule requête SQL au lieu de N.

    Du coup....
    - Analyseur de performance pour voir combien de temps est consommé par toutes ces requêtes SQL.
    - Si elles prennent beaucoup de temps, tu testes quel est le temps consommé par 1 seule requête qui renverrait toutes les lignes.
    - Et si c'est gagnant, tu essaies de voir comment réorganiser ton traitement pour implémenter ça et lancer une seule requête SQL.

    Ton N (ton nombre de lignes dans ton tableau), il vaut combien ?
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  6. #6
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Cela rejoint la discussion ouverte par matheous ici
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Août 2009
    Messages : 97
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    A chaque nouvelle ligne ajoutée dans ce tableau (N lignes), tu lances une procédure de calcul avec une requête SQL.

    ça commence mal.
    Tu as certainement la possibilité de lancer une seule requête SQL au lieu de N.

    Du coup....
    - Analyseur de performance pour voir combien de temps est consommé par toutes ces requêtes SQL.
    - Si elles prennent beaucoup de temps, tu testes quel est le temps consommé par 1 seule requête qui renverrait toutes les lignes.
    - Et si c'est gagnant, tu essaies de voir comment réorganiser ton traitement pour implémenter ça et lancer une seule requête SQL.

    Ton N (ton nombre de lignes dans ton tableau), il vaut combien ?
    Je suis bien d'accord avec votre réflexion...

    Le seul problème, c'est que je n'ai pas la possibilité de réduire la quantité de ces requêtes...
    C'est assez complexe à expliquer, mais pour chaque lignes de tableaux, j'ai le "WHERE" de ma requête qui est différent puisque les valeurs données en paramètres ne sont pas les mêmes.

    J'ai pris le traitement le plus "long" qu'il risque d'arriver en production et je suis aux alentours de 25 lignes dans mon tableau.

    Enfin, j'ai réduis une partie du code contenant une requête pour faire un UNION ALL au lieu de lancer 3 requêtes pour parvenir au même résultat.
    Avec les chronos, c'est plus long de faire le UNION ALL que 3 requêtes séparées (ca se joue sur 10 ms mais multiplié par N, ca commence à être visible...)

  8. #8
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Je ne suis pas spécialiste SQL, mais tu peux peut-être faire un WHERE moins restrictif et travailler sur le résultat retourné.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Août 2009
    Messages : 97
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    Je ne suis pas spécialiste SQL, mais tu peux peut-être faire un WHERE moins restrictif et travailler sur le résultat retourné.
    Il faudrait que j'analyse...

    Cependant, une chose me chagrine sur l'analyse des performances...
    Nom : capture1.png
Affichages : 139
Taille : 4,6 Ko

    Ca c'est l'analyse du traitement complet avec les deux premières fonctions les plus consommatrices dans la synthèse.
    Pour info, ma méthode sql_versStructure() fait un HExécuteRequeteSQL() suivi d'un FichierVersTableau().

    Si je double-clique sur le deuxième (53 appels), j'ai un résultat plutôt logique :

    Nom : capture2.png
Affichages : 134
Taille : 10,8 Ko

    Par contre, si je double-clique sur le premier (48 appels) qui correspond à la deuxième partie de mon traitement complet :

    Nom : capture3.png
Affichages : 133
Taille : 10,9 Ko

    Le FichierVersTableau() est presque autant consommateur que le HExécuteRequeteSQL().
    A comparer entre les deux, c'est étonannt

    Je dois avoir un problème quelque part...

  10. #10
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 393
    Points
    9 393
    Par défaut
    j'ai le "WHERE" de ma requête qui est différent
    Oui, ça, je l'avais bien deviné.

    L'idée, c'est de faire une requête au lieu de 25, puis lire le résultat de cette requête, et alimenter les structures, et aussi le tableau de structure.

    En gros :
    Version de départ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select IdFamille from BDD1 where ville= 'Paris'
    puis 
    pour chaque famille :
      select Prénom from BDD2 where IdFamille = %1
    fin
    Version 'intégrée' :
    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
    select BDD1.Idfamille, BDD2.Prénom from BDD1, BDD2 where ville = 'Paris' and BDD2.IdFamille = BDD1.IdFamille 
    order by BDD1.IdFamille
     
    Puis 
    hlitPremier (marequete)
    tantque pas hendehors 
       NouvelleStructure.nbEnfants=0
       NouvelleStructure.IdFamille =  marequete.IdFamille
       tantque pas hendehors  et    marequete.IdFamille= NouvelleStructure.IdFamille 
          NouvelleStructure.nbEnfants++
          NouvelleStructure.PrenomEnfant(   NouvelleStructure.nbEnfants ) = marequete.prenom
          hlitsuivant(marequete)
       fin
       tableauAjoute ( tbStructure, NouvelleStructure) 
    fin
    Je m'attendais à beaucoup plus de lignes , et donc un bénéfice quasi certain à faire une seule requête. Avec seulement 25 lignes, c'est moins évident.

    Un truc qui est souvent efficace, c'est de s'assurer que la base de donnée est 'propre'. Cf la fonction hReindexe().
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  11. #11
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Si tu ne récupères que 25 lignes, le plus simple est de trouver comment les récupérer d'un coup (et pas de faire 25 requêtes)

    Concernant le hreindexe(), pas sûr que ça fonctionne avec MySQL.

    Derniers points :
    - as-tu installé le connecteur natif MySQL ?
    - as-tu regardé si tu pouvais améliorer les perfs de communication entre la BDD (potentiellement sur l'internet) et ton pc de traitement ?
    - est-il possible de faire une "réplication" (en local) des tables sur lesquelles tu requêtes ?
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Août 2009
    Messages : 97
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    Si tu ne récupères que 25 lignes, le plus simple est de trouver comment les récupérer d'un coup (et pas de faire 25 requêtes)

    Concernant le hreindexe(), pas sûr que ça fonctionne avec MySQL.

    Derniers points :
    - as-tu installé le connecteur natif MySQL ?
    - as-tu regardé si tu pouvais améliorer les perfs de communication entre la BDD (potentiellement sur l'internet) et ton pc de traitement ?
    - est-il possible de faire une "réplication" (en local) des tables sur lesquelles tu requêtes ?
    Oui, je suis avec le connecteur natif MySQL.
    Côté perf, j'ai lancé mon traitement sur le serveur directement en local et il n'y a pas de différence.

    Je ne sais pas si vous avez vu ma réponse ci-dessous où j'ai trouvé quelque chose de bizarre :
    Citation Envoyé par matheous Voir le message
    Il faudrait que j'analyse...

    Cependant, une chose me chagrine sur l'analyse des performances...
    Nom : capture1.png
Affichages : 139
Taille : 4,6 Ko

    Ca c'est l'analyse du traitement complet avec les deux premières fonctions les plus consommatrices dans la synthèse.
    Pour info, ma méthode sql_versStructure() fait un HExécuteRequeteSQL() suivi d'un FichierVersTableau().

    Si je double-clique sur le deuxième (53 appels), j'ai un résultat plutôt logique :

    Nom : capture2.png
Affichages : 134
Taille : 10,8 Ko

    Par contre, si je double-clique sur le premier (48 appels) qui correspond à la deuxième partie de mon traitement complet :

    Nom : capture3.png
Affichages : 133
Taille : 10,9 Ko

    Le FichierVersTableau() est presque autant consommateur que le HExécuteRequeteSQL().
    A comparer entre les deux, c'est étonannt

    Je dois avoir un problème quelque part...

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

    Pour votre FichierVersTableau, quel est le type de la destination ? d'expérience l'allocation d'objet est assez couteuse en terme de temps de cycle.
    Vous utilisez les attributs de mapping ou le binding est implicite ? je ne sais pas si cela peu avoir un coût entre les 2 mais dans le doute il faudrait essayer.

    PS: avez-vous noté que le la fonction FichierVersTableau est bloquante pour les threads, voir dernière remarque dans l'aide

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Août 2009
    Messages : 97
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par themayu Voir le message
    Bonjour,

    Pour votre FichierVersTableau, quel est le type de la destination ? d'expérience l'allocation d'objet est assez couteuse en terme de temps de cycle.
    Vous utilisez les attributs de mapping ou le binding est implicite ? je ne sais pas si cela peu avoir un coût entre les 2 mais dans le doute il faudrait essayer.

    PS: avez-vous noté que le la fonction FichierVersTableau est bloquante pour les threads, voir dernière remarque dans l'aide
    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
    PROCÉDURE sql_versStructure(pstResultat, pchRequeteSQL chaîne)
     
    nNbEnreg 	est un 	entier = 0
    sdResultat 	est une Source de Données
     
    // Exécution de la requête
    SI PAS HExécuteRequêteSQL(sdResultat,:m_cnxConnexion,hRequêteSansCorrection,pchRequeteSQL) ALORS                                                                            	
    	:m_chRetour = "Échec de l'exécution de la requête => " + pchRequeteSQL + RC + ErreurInfo(errMessage)
    	nNbEnreg = -1
    FIN
     
    // Lecture
    SI nNbEnreg <> -1 ALORS
    	HLitPremier(sdResultat,hSansRafraîchir)
    	SI PAS HTrouve(sdResultat) ALORS
    		nNbEnreg = 0
    	SINON
    		nNbEnreg = HNbEnr(sdResultat)
    	FIN
     
    	// Envoi des données vers la structure résultante
    	FichierVersTableau(pstResultat,sdResultat)
     
    	// Fermeture de la source de données
    	HAnnuleDéclaration(sdResultat)
    FIN
     
    RENVOYER nNbEnreg
    Voici le code de ma méthode sql_versStructure.
    En paramètre :
    - pstResultat : pas de type mais il s'agit d'une structure ou d'un tableau de structures
    - pchRequeteSQL : ma requête SQL

    Et oui, j'avais remarqué que la fonction est bloquante pour les threads mais j'ai un traitement séquentiel pour le moment.

  15. #15
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    J'écrirais plutôt ceci :
    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
    nNbEnreg 	est un 	entier = 0
    sdResultat 	est une Source de Données
     
    // Exécution de la requête
    SI PAS HExécuteRequêteSQL(sdResultat,:m_cnxConnexion,hRequêteSansCorrection,pchRequeteSQL) ALORS                                                                            	
    	:m_chRetour = "Échec de l'exécution de la requête => " + pchRequeteSQL + RC + ErreurInfo(errMessage)
    	nNbEnreg = -1
    SINON
    	// Lecture
    	nNbEnreg = HNbEnr(sdResultat)
    	// Envoi des données vers la structure résultante
    	FichierVersTableau(pstResultat,sdResultat)
    FIN
     
    // Fermeture de la source de données
    HAnnuleDéclaration(sdResultat)
     
    RENVOYER nNbEnreg
    Une question : Est-ce que tu as essayé de remplacer le FichierVersTableau par une belle boucle ?
    Une autre : Tu n'as pas typé les paramètres de la procédure. Est-ce que si tu les types (dans un cas bien particulier, on est d'accord), ça va plus vite ?
    Une dernière : tu as combien de "cas" d'appel possibles à ta procédure ?
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Août 2009
    Messages : 97
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    J'écrirais plutôt ceci :
    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
    nNbEnreg 	est un 	entier = 0
    sdResultat 	est une Source de Données
     
    // Exécution de la requête
    SI PAS HExécuteRequêteSQL(sdResultat,:m_cnxConnexion,hRequêteSansCorrection,pchRequeteSQL) ALORS                                                                            	
    	:m_chRetour = "Échec de l'exécution de la requête => " + pchRequeteSQL + RC + ErreurInfo(errMessage)
    	nNbEnreg = -1
    SINON
    	// Lecture
    	nNbEnreg = HNbEnr(sdResultat)
    	// Envoi des données vers la structure résultante
    	FichierVersTableau(pstResultat,sdResultat)
    FIN
     
    // Fermeture de la source de données
    HAnnuleDéclaration(sdResultat)
     
    RENVOYER nNbEnreg
    Merci pour ta suggestion.
    Cependant, le problème quand je mets ton code c'est que ma structure résultante n'est pas alimentée (lié à l'absence du HLitPremier() je suppose)

    Citation Envoyé par frenchsting Voir le message
    Une question : Est-ce que tu as essayé de remplacer le FichierVersTableau par une belle boucle ?
    C'est à dire ?

    Citation Envoyé par frenchsting Voir le message
    Une autre : Tu n'as pas typé les paramètres de la procédure. Est-ce que si tu les types (dans un cas bien particulier, on est d'accord), ça va plus vite ?
    Pour typer, il faudrait que je la duplique en sql_versStructure() et sql_versTableauStructure() puisque ce n'est pas la même chose ?

    Citation Envoyé par frenchsting Voir le message
    Une dernière : tu as combien de "cas" d'appel possibles à ta procédure ?
    Quand tu dis "cas", c'est le nombre de fois ou j'appelle ma procédure avec le paramètre pstResultat différent ?

  17. #17
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Citation Envoyé par matheous Voir le message
    Merci pour ta suggestion.
    Cependant, le problème quand je mets ton code c'est que ma structure résultante n'est pas alimentée (lié à l'absence du HLitPremier() je suppose)


    C'est à dire ?


    Pour typer, il faudrait que je la duplique en sql_versStructure() et sql_versTableauStructure() puisque ce n'est pas la même chose ?


    Quand tu dis "cas", c'est le nombre de fois ou j'appelle ma procédure avec le paramètre pstResultat différent ?
    1. Oui, il semblerait. C'est étrange quand même...
    2. Tu peux dupliquer pour avoir une entête du genre : PROCÉDURE sql_versStructure(pstResultatClient est un tableau de str_Client, pchRequeteSQL est une chaîne). Et faire le test avec la requête "CLIENT".
    3. C'est surtout combien de pstResultat différents tu as.

    L'idée est de savoir si en typant, tu gagnes en temps d'exécution.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Août 2009
    Messages : 97
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    1. Oui, il semblerait. C'est étrange quand même...
    2. Tu peux dupliquer pour avoir une entête du genre : PROCÉDURE sql_versStructure(pstResultatClient est un tableau de str_Client, pchRequeteSQL est une chaîne). Et faire le test avec la requête "CLIENT".
    3. C'est surtout combien de pstResultat différents tu as.

    L'idée est de savoir si en typant, tu gagnes en temps d'exécution.
    Le problème du typage c'est que je connais pas la structure entrante...
    Le plus étonnant, c'est que dans la première partie du traitement, je n'ai pas ce problème de "délai" sur le FichierVersTableau(), malgré que la méthode n'a pas de typage.

    Et c'est bien ca que je comprends pas

    Dans ma deuxième partie, j'ai deux pstResultat différents (2 structures différentes, l'une qui est un tableau de structure et l'autre une structure simple).
    Dans la première partie du traitement, j'ai la même chose (2 structures différentes, l'une qui est un tableau de structure et l'autre une structure simple).

    Peut-être que pour chaque itération, je dois réinitialiser quelque chose que je ne fais pas...
    Je fais un TableauSupprimeTout de mon tableau de structure lors d'une nouvelle itération de ma boucle.

  19. #19
    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
    Le résultat de la requête et le contenu de la structure sont iso en nombre de membre ? est-ce que votre requête renvoie plus de colonnes que vous avez de membre dans la structure ?

    Vous n'avez pas répondu pour le binding, peut être en partageant la requête et la structure associée on pourrait relever quelque chose

  20. #20
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Autres idées :
    - mettre un LOCAL pour avoir un passage par valeur plutôt qu'un passage par adresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROCÉDURE sql_versStructure(LOCAL pstResultat, pchRequeteSQL chaîne) 
    [...]
    RENVOYER pstResultat.
    - Si tu fais 2 appels à ta procédure, faire des appels sur 2 tableaux différents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Construction requête 1
    [...]
    sql_versStructure(stResultat1, pchRequeteSQL1) 
    //Construction requête 2
    [...]
    sql_versStructure(stResultat2, pchRequeteSQL2)
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Jeu le mot le plus long avec Tkinter
    Par calaca dans le forum Tkinter
    Réponses: 12
    Dernier message: 10/12/2013, 19h16
  2. Temps de traitement de plus en plus long
    Par JUSTIN Loïc dans le forum Requêtes
    Réponses: 8
    Dernier message: 28/11/2011, 08h49
  3. [PHP 5.0] Scipts long avec plein de taches.
    Par mims1664 dans le forum Langage
    Réponses: 6
    Dernier message: 22/11/2010, 13h37
  4. [video Humour]Le meurtre le plus long et le plus atroce avec l'arme la plus inefficace !
    Par Lyche dans le forum La taverne du Club : Humour et divers
    Réponses: 18
    Dernier message: 01/02/2010, 08h57
  5. [Oracle 9i] Traitement plus long après calcul de statistique
    Par iSylvain dans le forum Administration
    Réponses: 8
    Dernier message: 04/03/2009, 11h08

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