Lenteur remplissage de table (62000 enregistrements)

Le
Dams
Bonjour,

je rencontre une lenteur énorme lors du remplissage de ma table
(environ 32 secondes) qui contient des clients, rien de plus
classique.

Mon fichier CLIENTS contient 62000 enregistrements, et je rempli ma
table par programmation. Au dessus de ma table il y a des Onglets
alphabétiques permettant à l'utilisateur de filtrer les clients (A, B,
C, D ) chaque onglet contient une lettre donc je construit mon
filtre en fonction de l'onglet sélectionné.



PROCEDURE RefreshClients()

// Je vide la table
TableSupprimeTout(TABLE_CLIENTS)

// Je récupère la lettre sélectionnée dans l'onglet sélectionné
sLettre est une chaine = ONG_FILTRE[ONG_FILTRE]..Libellé

// Je créé mon filtre sur les clients contenant la lettre sélectionn=
ée
// sRubParcours contiendra la rubrique retournée automatiquement pour
la parcours
sRubParcours est une chaine = HFiltre(CLIENTS, "NOM LIKE '"+sLettre
+"%'")

// Je lit le premier client trouvé
HLitPremier(CLIENTS, sRubParcours)

// Je boucle sur tous les clients et je rempli ma table
TANTQUE HTrouve(CLIENTS)
TableAjouteLigne(TABLE_CLIENTS, CLIENTS.NOM, CLIENTS.PRENOM,
CLIENTS.SOCIETE)
HLitSuivant(CLIENTS)
FIN

// Je désactive le filtre créé
HDésactiveFiltre(CLIENTS)



Le remplissage de la table dure environ 32 secondes !! Pour un simple
remplissage comme celui-ci.

Ma question est de savoir si d'après vous je m'y prend mal pour
remplir ma table, pourtant j'utilise des filtres pour éviter de
charger TOUTES les données, ou alors c'est Windev qui est limité.

D'avance merci.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 4
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Romain PETIT
Le #21287981
Dams avait prétendu :
Bonjour,



Bonjour,

Le remplissage de la table dure environ 32 secondes !! Pour un simple
remplissage comme celui-ci.



La rubrique CLIENT est-elle une clé ?

A+

--
Romain PETIT
contact : rompetit chez free fr
+-+ posté sur Usenet avec MesNews et non depuis un forum web +-+
news:fr.comp.developpement.agl.windev
http://www.mesnews.net/
http://fr.wikipedia.org/wiki/Newsgroup
Romain PETIT
Le #21287971
Dams avait prétendu :
Bonjour,



Bonjour,

Le remplissage de la table dure environ 32 secondes !! Pour un simple
remplissage comme celui-ci.



La rubrique CLIENT.NOM est-elle une clé ?

A+

--
Romain PETIT
contact : rompetit chez free fr
+-+ posté sur Usenet avec MesNews et non depuis un forum web +-+
news:fr.comp.developpement.agl.windev
http://www.mesnews.net/
http://fr.wikipedia.org/wiki/Newsgroup
Gilles
Le #21288451
Dans son message précédent, Dams a écrit :
Bonjour,

je rencontre une lenteur énorme lors du remplissage de ma table
(environ 32 secondes) qui contient des clients, rien de plus
classique.
Mon fichier CLIENTS contient 62000 enregistrements, et je rempli ma
table par programmation. Au dessus de ma table il y a des Onglets
alphabétiques permettant à l'utilisateur de filtrer les clients (A, B,
C, D ...) chaque onglet contient une lettre donc je construit mon
filtre en fonction de l'onglet sélectionné.



Ta rubrique est indexée?
Tu as essayé avec une requête paramétrée?
Ca fait des siècles que je n'utilise plus cette horreur de hFiltre ;)
Dams
Le #21289691
Je confirme que ma rubrique CLIENTS.NOM est une clé avec doublons.

Je vais essayer une requête paramétrée et je vous retourne le résul tat
des performances.
Dams
Le #21289801
J'ai essayé de remplir ma table avec une requête, mais pas de
changement, si ce n'est 2 secondes par rapport à l'utilisation de
HFiltre soit au final 30 secondes de chargement pour 62000 clients
dans le fichier.

J'ai procédé à une ré-indexation de mon fichier CLIENTS, ce qui n'a
rien changé aux performances.
J'ai effectué une analyse de performance et le résultat indique quele
traitement du moteur (donc Windev) a pris environ 30 secondes
(fonctions HLitPremier, HLitSuivant)
La fonction HFiltre n'a pris que quelques millisecondes

Je ne sais plus trop quoi faire de mieux !

Je viens de regarder une vidéo sur le site de Windev, qui montre un
exemple de chargement d'une table avec 15 milliards d'enregistrement
en quelques millisecondes .... même si ça concerne la version 15 et
que je suis en 14, je me demande bien comment cela est possible
sachant que pour seulement 62000 de mon côté c'est inutilisable !

Si quelqu'un veut se faire du mal un pti coup :
http://www.pcsoft-windev-webdev.com/videos15/tdfcom2009/base-de-donnees-hyp erfilesql-de-15-milliards-de-lignes/base-de-donnees-hyperfilesql-de-15-mill iards-de-lignes.html
Gilles
Le #21290271
Dams avait soumis l'idée :
J'ai essayé de remplir ma table avec une requête, mais pas de
changement, si ce n'est 2 secondes par rapport à l'utilisation de
HFiltre soit au final 30 secondes de chargement pour 62000 clients
dans le fichier.

J'ai procédé à une ré-indexation de mon fichier CLIENTS, ce qui n'a
rien changé aux performances.
J'ai effectué une analyse de performance et le résultat indique quele
traitement du moteur (donc Windev) a pris environ 30 secondes
(fonctions HLitPremier, HLitSuivant)
La fonction HFiltre n'a pris que quelques millisecondes

Je ne sais plus trop quoi faire de mieux !



Tu peux essayer en évitant de coder :
Faire une table fichier basée sur la requête, et la paramétrer pour
qu'elle charge en mémoire...

Cela dit 62000 enregistrement, ca ne veut rien dire, si tu ramènes 3
mega octets par enregistrement ;)

Tes rubriques ne sont pas énormes?
Tu as essayé sur un autre pc? (antivirus??)
Dams
Le #21290461
Salut Gilles,

initialement ma table etait en liaison sur le fichier CLIENTS (liaison
mémoire justement), c'est dû à cette lenteur que j'ai rempli la table
par programmation, pensant que ça serait plus "light" mais ça change
rien.

J'ai executé une requête avec WDSQL sur mon fichier CLIENTS et le
résultat est instantané, ce qui m'amène à penser que ce n'est pas u n
problème sur mon fichier ni ma requête puisque celle-ci s'exécute
rapidement.

J'ai executé la requête suivante afin de retourner tous les clients
dont le nom commence par A, et il y en a 4136

SELECT * FROM CLIENTS WHERE NOM LIKE 'A%'

C'est le remplissage de la table qui prend énormément de temps, sauf
que d'après le code que je vous ai fourni, je ne vois pas comment je
pourrais faire plus simple, c'est le mode de chargement le plus
courant je suppose.

Concernant l'autre PC, j'ai effectué un test et c'est exactement
pareil, le chargement de la table est extrêmement long. Et sur le PC
de développement sur lequel je travail c'est une bête de course donc
j'ai ecarté le problème de performances du PC :

Windows 7
12 Go RAM Tri-Channel
CPU Intel Core I7 940

2ème PC :
Windows 7
4 Go RAM
CPU Intel Core I7 920


Je sèche complet !
Eric
Le #21290711
Le 28 février 2010 à 23:44, dans
Dams nous disait :

C'est le remplissage de la table qui prend énormément de temps, sauf
que d'après le code que je vous ai fourni, je ne vois pas comment je
pourrais faire plus simple, c'est le mode de chargement le plus
courant je suppose.



Décoche "Ascenseur proportionnel" dans le descriptif de ta table
fichier, pour voir.

--
Eric
Dams
Le #21290701
Idem, ça ne change rien.

J'ai ouvert mon fichier avec WDMap qui affiche le contenu de mon
fichier CLIENTS instantanément. Je pense que le principe est le même
puisqu'il y a une table qui liste les données.

Je précise, au cas où, que ma table est située dans une fenêtre
interne. J'ai pensé que ça pouvait venir de là, mais le temps de
chargement de la table est identique à l'initialisation de ma fenêtre
interne et quand elle est déjà ouverte.

Dans mon application, j'ai une fenêtre interne également, qui contient
une table, qui elle, liste des commandes. Il y en a environ 50000 et
l'affichage est instantané, j'utilise exactement le même principe de
chargement que celui que je vous ai fourni en exemple.

J'ai des clients (clients qui utilisent mon application) , qui ont
environ 5000 clients dans leur fichier et pour qui les performances
sont très bonnes, mais à partir de 15000 ça devient inutilisable.
Firetox
Le #21290921
Bonjour

essayer de faire

Matable..visible = faux
// chargement
MAtable..visible = Vrai


le fait de mettre la table en invisible fait gagner dut temps
car l'affichage des ligne est momentaenment arreter

sous windev 12 on gagne 30 % du temps de chargement

Bon dev
@+


"Dams" news:
Idem, ça ne change rien.

J'ai ouvert mon fichier avec WDMap qui affiche le contenu de mon
fichier CLIENTS instantanément. Je pense que le principe est le même
puisqu'il y a une table qui liste les données.

Je précise, au cas où, que ma table est située dans une fenêtre
interne. J'ai pensé que ça pouvait venir de là, mais le temps de
chargement de la table est identique à l'initialisation de ma fenêtre
interne et quand elle est déjà ouverte.

Dans mon application, j'ai une fenêtre interne également, qui contient
une table, qui elle, liste des commandes. Il y en a environ 50000 et
l'affichage est instantané, j'utilise exactement le même principe de
chargement que celui que je vous ai fourni en exemple.

J'ai des clients (clients qui utilisent mon application) , qui ont
environ 5000 clients dans leur fichier et pour qui les performances
sont très bonnes, mais à partir de 15000 ça devient inutilisable.
Publicité
Poster une réponse
Anonyme