Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Lenteur remplissage de table (62000 enregistrements)

31 réponses
Avatar
Dams
Bonjour,

je rencontre une lenteur =E9norme 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=E9tiques permettant =E0 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=E9lectionn=E9.



PROCEDURE RefreshClients()

// Je vide la table
TableSupprimeTout(TABLE_CLIENTS)

// Je r=E9cup=E8re la lettre s=E9lectionn=E9e dans l'onglet s=E9lectionn=E9
sLettre est une chaine =3D ONG_FILTRE[ONG_FILTRE]..Libell=E9

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

// Je lit le premier client trouv=E9
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=E9sactive le filtre cr=E9=E9
HD=E9sactiveFiltre(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=E8s vous je m'y prend mal pour
remplir ma table, pourtant j'utilise des filtres pour =E9viter de
charger TOUTES les donn=E9es, ou alors c'est Windev qui est limit=E9.

D'avance merci.

10 réponses

1 2 3 4
Avatar
Romain PETIT
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
Avatar
Romain PETIT
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
Avatar
Gilles
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 ;)
Avatar
Dams
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.
Avatar
Dams
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
Avatar
Gilles
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??)
Avatar
Dams
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 !
Avatar
Eric
Le 28 février 2010 à 23:44, dans
<news:,
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
Avatar
Dams
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.
Avatar
Firetox
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" a écrit dans le message de
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.
1 2 3 4