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 avec champ tableur


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 176
    Par défaut lenteur avec champ tableur
    Bonne rencontre,

    Je viens d'essayer le champs tableur et j'ai une lenteur d'exécution relativement dissuasive.

    J’ai une procédure stocke en MS-SQL qui retourne un résultat en un claquement de doigt (+- 60k lignes).

    Quand je stock dans une table, j’ai le résultat presque instantanément.

    Quand je le stock dans un champs tableur, il me faut un temps fou. Je ne remplis peut-être pas mon champ tableur de la bonne façon.

    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
     
    txtReq est une chaîne = "" 
    ChiffrePeriodeInstantTV2 est une Source de Données
    nPositionLigne est un entier = 2
     
    TableurAjouteDonnée(TBLR_rapport,1,1, "DateChiffre")
    TableurAjouteDonnée(TBLR_rapport,2,1, "Chiffre")
    TableurAjouteDonnée(TBLR_rapport,3,1, "ChiffreBefore1")
    TableurAjouteDonnée(TBLR_rapport,4,1, "PourcentNational")
    TableurAjouteDonnée(TBLR_rapport,5,1, "Pax")
    TableurAjouteDonnée(TBLR_rapport,6,1, "Segment")
    TableurAjouteDonnée(TBLR_rapport,7,1, "PaxBefore1")
    TableurAjouteDonnée(TBLR_rapport,8,1, "SegmentBefore1")
    TableurAjouteDonnée(TBLR_rapport,9,1, "NomAgence")
    TableurAjouteDonnée(TBLR_rapport,10,1, "Matricule")
    TableurAjouteDonnée(TBLR_rapport,11,1, "NomTo")
    TableurAjouteDonnée(TBLR_rapport,12,1, "NomSecteur")
    TableurAjouteDonnée(TBLR_rapport,13,1, "OrdreTo")
    TableurAjouteDonnée(TBLR_rapport,14,1, "Parite")
    TableurAjouteDonnée(TBLR_rapport,15,1, "SaisiLe")
    TableurAjouteDonnée(TBLR_rapport,16,1, "SaisiPar")
    TableurAjouteDonnée(TBLR_rapport,17,1, "ModifierLe")
    TableurAjouteDonnée(TBLR_rapport,18,1, "ModifierPar")
    TableurAjouteDonnée(TBLR_rapport,19,1, "IDAgence")
    TableurAjouteDonnée(TBLR_rapport,20,1, "IDTourOperateur")
    TableurAjouteDonnée(TBLR_rapport,21,1, "IDSecteur")
     
    JAUGE_progression..BorneMin = 0
    JAUGE_progression = 0
     
    txtReq = "EXEC [dbo].[User_ChiffrePeriodeInstantTV2] ;"
     
    SI HExécuteRequêteSQL(ChiffrePeriodeInstantTV2,"gcnxMaConnexion", ...
    	hRequêteSansCorrection,txtReq) ALORS
    	JAUGE_progression..BorneMax = HNbEnr(ChiffrePeriodeInstantTV2)		
    	HLitPremier(ChiffrePeriodeInstantTV2)
    	TANTQUE PAS HEnDehors(ChiffrePeriodeInstantTV2)
     
    		TableurAjouteDonnée(TBLR_rapport,1,nPositionLigne, ChiffrePeriodeInstantTV2.DateChiffre)
    		TableurAjouteDonnée(TBLR_rapport,2,nPositionLigne, ChiffrePeriodeInstantTV2.chiffre)
    		TableurAjouteDonnée(TBLR_rapport,3,nPositionLigne, ChiffrePeriodeInstantTV2.chiffreBefore1)
    		TableurAjouteDonnée(TBLR_rapport,4,nPositionLigne, ChiffrePeriodeInstantTV2.PourcentNational)
    		TableurAjouteDonnée(TBLR_rapport,5,nPositionLigne, ChiffrePeriodeInstantTV2.Pax)
    		TableurAjouteDonnée(TBLR_rapport,6,nPositionLigne, ChiffrePeriodeInstantTV2.Segment)
    		TableurAjouteDonnée(TBLR_rapport,7,nPositionLigne, ChiffrePeriodeInstantTV2.PaxBefore1)
    		TableurAjouteDonnée(TBLR_rapport,8,nPositionLigne, ChiffrePeriodeInstantTV2.SegmentBefore1)
    		TableurAjouteDonnée(TBLR_rapport,9,nPositionLigne, ChiffrePeriodeInstantTV2.NomAgence)
    		TableurAjouteDonnée(TBLR_rapport,10,nPositionLigne, ChiffrePeriodeInstantTV2.Matricule)
    		TableurAjouteDonnée(TBLR_rapport,11,nPositionLigne, ChiffrePeriodeInstantTV2.NomTo)
    		TableurAjouteDonnée(TBLR_rapport,12,nPositionLigne, ChiffrePeriodeInstantTV2.NomSecteur)
    		TableurAjouteDonnée(TBLR_rapport,13,nPositionLigne, ChiffrePeriodeInstantTV2.OrdreTo)
    		TableurAjouteDonnée(TBLR_rapport,14,nPositionLigne, ChiffrePeriodeInstantTV2.Parite)
    		TableurAjouteDonnée(TBLR_rapport,15,nPositionLigne, ChiffrePeriodeInstantTV2.SaisiLe)
    		TableurAjouteDonnée(TBLR_rapport,16,nPositionLigne, ChiffrePeriodeInstantTV2.SaisiPar)
    		TableurAjouteDonnée(TBLR_rapport,17,nPositionLigne, ChiffrePeriodeInstantTV2.ModifierLe)
    		TableurAjouteDonnée(TBLR_rapport,18,nPositionLigne, ChiffrePeriodeInstantTV2.ModifierPar)
    		TableurAjouteDonnée(TBLR_rapport,19,nPositionLigne, ChiffrePeriodeInstantTV2.IDAgence)
    		TableurAjouteDonnée(TBLR_rapport,20,nPositionLigne, ChiffrePeriodeInstantTV2.IDTourOperateur)
    		TableurAjouteDonnée(TBLR_rapport,21,nPositionLigne, ChiffrePeriodeInstantTV2.IDSecteur)
     
    		nPositionLigne++
    		JAUGE_progression++
    		HLitSuivant(ChiffrePeriodeInstantTV2)
    	FIN
    	HAnnuleDéclaration(ChiffrePeriodeInstantTV2)
    SINON
    	Erreur(HErreurInfo())	
    FIN
     
    SI TableurSauve(TBLR_rapport,gsRepertoirerRapport+"\RapportChiffre" + DateDuJour()+".xlsx",tblrEcrasementAutorisé) = Faux ALORS
    	Erreur("Fichier non sauvegardé " + ErreurInfo())
    SINON
    	Info("Fichier sauvegardé")
    FIN
    D'avance, merci pour votre retour.

    Raphaël.

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 399
    Par défaut
    Bonjour,

    Comment remplis-tu la table ? avec un TableAjouteLigne(..) ?
    Une boucle de 60k lignes pour remplir une table ou un tableur devrait arriver au même résultat.

    Tu peux jouer avec la propriété ..AffichageActif, qui fonctionne pas mal avec les remplissages de table.
    Je n'ai personnellement pas essayer le champ Tableur pour le moment.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 176
    Par défaut
    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
    txtReq est une chaîne = "" 
    ChiffrePeriodeInstantTV2 est une Source de Données
    nPositionLigne est un entier = 2
    JAUGE_progression..BorneMin = 0
    JAUGE_progression = 0
     
    txtReq = "EXEC [dbo].[User_ChiffrePeriodeInstantTV2] ;"
    ChronoDébut()
    SI HExécuteRequêteSQL(ChiffrePeriodeInstantTV2,"gcnxMaConnexion", ...
    	hRequêteSansCorrection,txtReq) ALORS
    	JAUGE_progression..BorneMax = HNbEnr(ChiffrePeriodeInstantTV2)		
    	HLitPremier(ChiffrePeriodeInstantTV2)
    	TANTQUE PAS HEnDehors(ChiffrePeriodeInstantTV2)
     
    		TableAjouteLigne(TABLE_SansNom1,ChiffrePeriodeInstantTV2.DateChiffre,...
    		ChiffrePeriodeInstantTV2.chiffre,...
    		ChiffrePeriodeInstantTV2.chiffreBefore1,...
    		ChiffrePeriodeInstantTV2.PourcentNational,...
    		ChiffrePeriodeInstantTV2.Pax,...
    		ChiffrePeriodeInstantTV2.Segment,...
    		ChiffrePeriodeInstantTV2.PaxBefore1,...
    		ChiffrePeriodeInstantTV2.SegmentBefore1,...
    		ChiffrePeriodeInstantTV2.NomAgence,...
    		ChiffrePeriodeInstantTV2.Matricule,...
    		ChiffrePeriodeInstantTV2.NomTo,...
    		ChiffrePeriodeInstantTV2.NomSecteur,...
    		ChiffrePeriodeInstantTV2.OrdreTo,...
    		ChiffrePeriodeInstantTV2.Parite,...
    		ChiffrePeriodeInstantTV2.SaisiLe,...
    		ChiffrePeriodeInstantTV2.SaisiPar,...
    		ChiffrePeriodeInstantTV2.ModifierLe,...
    		ChiffrePeriodeInstantTV2.ModifierPar,...
    		ChiffrePeriodeInstantTV2.IDAgence,...
    		ChiffrePeriodeInstantTV2.IDTourOperateur,...
    		ChiffrePeriodeInstantTV2.IDSecteur)
     
    		nPositionLigne++
    		JAUGE_progression++
    		HLitSuivant(ChiffrePeriodeInstantTV2)
    	FIN
    	HAnnuleDéclaration(ChiffrePeriodeInstantTV2)
    SINON
    	Erreur(HErreurInfo())	
    FIN
     
     
    Trace(ChronoFin())
    Pour le champ table = 5042 millisecondes

    Pour le champ classeur = 154281 millisecondes (117545 avec TBLR_rapport..AffichageActif = Faux)


  4. #4
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 399
    Par défaut
    ouch ah oui quand même

    Je dirais comme cela que la différence vient du mode de remplissage dans le sens où tu utilises 1 seul TableAjouteLigne(..) à chaque itération, contre 21 TableurAjouteDonnee(..).

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 176
    Par défaut
    Oui, c'est clairement ça.

    Si je ne mets qu'une seule données, j'obtiens le résultat en 11257 millisecondes ce qui n'est déjà pas très encourageant.

    Je ne vois rien dans donc qui me permettrait d'afficher les données avec une seule commande.

    Peut être que le champ n'est vraiment prévu que pour charger des fichiers xls mais je trouvais sympa de proposer directement les données sous forme de classeur dans l'application.

    Je vais continue à faire comme avant... Table + export en fichier xls.

    Merci pour ton retour.

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 215
    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 215
    Par défaut
    Juste par curiosité (je n'utilise pas non plus les champs tableur), si tu divises le nombre de ligne par 2, est ce que le temps de traitement est divisé par 2, ou par un nombre supérieur à 2.

    En d'autres mots, est-ce que le temps de chargement est linéaire (les premières lignes prennent autant de temps que les dernières), ou bien exponentiel (les dernières lignes prennent plus de temps que les premières) ?

    De toutes façons, de ce que j'ai vu du champ tableur, l'export vers Excel reste vraiment la bonne solution.

Discussions similaires

  1. [WD17] Lenteur chargement champ planning avec visible = vrai ou plan
    Par pompomthebest dans le forum WinDev
    Réponses: 17
    Dernier message: 30/10/2020, 13h28
  2. [stringtokenizer] probleme avec champs vides
    Par gege2mars dans le forum Langage
    Réponses: 9
    Dernier message: 30/06/2004, 08h25
  3. Pb de tri avec champs vide
    Par Invité dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2004, 17h42
  4. [Débutant] Lenteur avec TComPort
    Par PhDt76 dans le forum C++Builder
    Réponses: 22
    Dernier message: 27/09/2003, 21h43
  5. fenêtre avec champs éditables
    Par LFC dans le forum Windows
    Réponses: 2
    Dernier message: 13/09/2003, 12h35

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