OVH Cloud OVH Cloud

Espoir de vitesse avec Windev 7.5 ou 8

8 réponses
Avatar
Real Philippon
Bonjour à tous,

Nous investiguons Windev 7.x depuis 14 mois dès que nous avons un moment
libre afin de nous assurer que cet environnement de développement soit
adéquant pour nos développements commerciaux sur mesure.

A ce jour, nous pourrions dire que de nombreuses fonctions et ordres de
programmation en Windev sont plus puissantes que ceux de notre langage
actuel et le concept général est supérieur.

Par contre, les quelques tests que nous avons effectués sur les bases de
données HF (avec index ou requêtes SQL) se sont avérés beaucoup plus lentes
que notre langage actuel Foxpro. Ce qui risque de nous mettre dans
l'embarras face à notre clientèle qui ne cesse de nous faire remarquer la
vitesse époustouflante

Mais, comme tout est relatif dans la vie, une vitesse d'exécution et
d'affichage des données est toujours comparative.
Par exemple, si nous suivons une clef d'une table fichier dans un Browse de
25 lignes (comme votre WDMAP), le langage que nous utilisons ne va
'chercher' que ces 25 rubriques et le résultat est toujours instantané quel
que soit le nombre total d'enregistrements. Quand nous appuyons sur "Page
Down", il va "chercher" les 25 suivants et ainsi de suite. Ce qui fait que,
dans ce cas, c'est toujours instantané.

Bien sûr que si nous utilisons une requête SQL pour aller "chercher" tous
les enregistrements de cette clef, cela risque d'être un peu plus long selon
le nombre d'enregistrements trouvés parce que la requête ira chercher tous
les éléments qui répondent à la condition.

Voici un autre exemple pour mieux comprendre ce que nous entendons par
vitesse.
Dans une de nos applications pour la Gestion de Clubs Vidéos, le processus
de préparation d'un nouveau mois fait la maintenance de 36 fichiers. Voici
un cas type.
C'est un processus plus ou moins complexe qui parcoure les tables fichiers
principales suivantes;
6300 enreg. Clients, lecture/écriture de chaque enreg. (transfert de soldes)
6800 enreg. Films, lecture/écriture de chaque enreg. (transfert de soldes)
2200 Comptes à recevoir, manipulations complexes et réécriture
706 Produits/Services, lectures/écriture de chaque enreg. (transfert de
soldes)
9336 Factures détaillées dans un champ mémo
75725 Historiques des locations, élimination des périmées
... et ainsi de suite.
Nous avons environ 4 clefs par fichier.

Le processus va aussi effacer et recréer tous les index de tous les fichiers
en éliminant les enregistrements effacés.

Un client installé avec un vieux Pentium 450 et Windows 98 nous a informé de
son inquiétude que le processus total prenait environ 25 minutes à se
compléter. Selon lui, ce long processus ne cadrait pas avec la vitesse d’
exécution à laquelle il était habitué depuis de nombreuses années avec cette
application.

Hors, la réindexation seule de ces 36 fichiers (effacer et recréer chacun
des index) prend environ 15 secondes au total. Pas pour chacun des fichiers,
15 secondes pour les 36 fichiers. Ça c'est de la vitesse!

Nous avons retravaillé la logique du processus mensuel et ce même client
complète maintenant ce processus complet en moins de 3 minutes –
réindexations comprises. Il est très content.

Voilà la vitesse à laquelle nous sommes habitué.

Autre exemple, nous avons un autre magasin qui a à peu près les mêmes
données que cité plus haut sauf que lui, il a plus de 37 000 clients
(membres). Une réindexation complète de ses 36 tables fichiers prend moins
de 30 secondes sur son Pentium 800 (réseau 5 postes avec Windows 98).

Nous ne touchons pas à la base de registre.

Peut-on s'attendre à un rendement semblable avec Windev?

Rien ne nous ferait plus plaisir que de lire des réponses positives.

Cordialement,

Réal Philippon
Programmation Ultra Ltée -o- www.ultra.ca
L'informatique sur mesure depuis plus de 24 ans

8 réponses

Avatar
mat
Bonjour Real,

En 7.5 la situation s'est amélioré un peu pour les requêtes avec la version
206g. Il n'y a plus les ralentissements lors d'accès multi-utilisateurs. Par
contre, la rapidité est toujours nettement inférieure aux requêtes de Visual
Foxpro. Pour les 2500 à 4200 enregistrements dans les résultats de nos
tests, c'était à peu près 3 à 5 fois plus lent (env. 2 à 3 secondes au lieu
de 0.5 à 1 seconde pour VFox, Delphi ou Paradox avec des machines < 1 Ghz).
Cela dépend biensûr aussi du matériel.

Le facteur principal de la lenteur des requêtes Windev / HF est que tous les
enregistrements du résultat sont lus en mémoire. Quand il n'y a pas de tri
et calcul sur le résultat Windev est plus rapide puisque la lecture est
complété en arrière plan. Il y a des gens qui disent que la 8 est plus
rapide, d'autres disent que c'est toujours lent. Aussi longtemps que les
résultats des requêtes sont lus en mémoire, je déconseille Windev / HF pour
des gens soucieux de rapidité.

Salutations
Mat


"Real Philippon" a écrit dans le message de
news:4jvZb.59478$%
Bonjour à tous,

Nous investiguons Windev 7.x depuis 14 mois dès que nous avons un moment
libre afin de nous assurer que cet environnement de développement soit
adéquant pour nos développements commerciaux sur mesure.

A ce jour, nous pourrions dire que de nombreuses fonctions et ordres de
programmation en Windev sont plus puissantes que ceux de notre langage
actuel et le concept général est supérieur.

Par contre, les quelques tests que nous avons effectués sur les bases de
données HF (avec index ou requêtes SQL) se sont avérés beaucoup plus


lentes
que notre langage actuel Foxpro. Ce qui risque de nous mettre dans
l'embarras face à notre clientèle qui ne cesse de nous faire remarquer la
vitesse époustouflante

Mais, comme tout est relatif dans la vie, une vitesse d'exécution et
d'affichage des données est toujours comparative.
Par exemple, si nous suivons une clef d'une table fichier dans un Browse


de
25 lignes (comme votre WDMAP), le langage que nous utilisons ne va
'chercher' que ces 25 rubriques et le résultat est toujours instantané


quel
que soit le nombre total d'enregistrements. Quand nous appuyons sur "Page
Down", il va "chercher" les 25 suivants et ainsi de suite. Ce qui fait


que,
dans ce cas, c'est toujours instantané.

Bien sûr que si nous utilisons une requête SQL pour aller "chercher" tous
les enregistrements de cette clef, cela risque d'être un peu plus long


selon
le nombre d'enregistrements trouvés parce que la requête ira chercher tous
les éléments qui répondent à la condition.

Voici un autre exemple pour mieux comprendre ce que nous entendons par
vitesse.
Dans une de nos applications pour la Gestion de Clubs Vidéos, le processus
de préparation d'un nouveau mois fait la maintenance de 36 fichiers. Voici
un cas type.
C'est un processus plus ou moins complexe qui parcoure les tables fichiers
principales suivantes;
6300 enreg. Clients, lecture/écriture de chaque enreg. (transfert de


soldes)
6800 enreg. Films, lecture/écriture de chaque enreg. (transfert de soldes)
2200 Comptes à recevoir, manipulations complexes et réécriture
706 Produits/Services, lectures/écriture de chaque enreg. (transfert de
soldes)
9336 Factures détaillées dans un champ mémo
75725 Historiques des locations, élimination des périmées
... et ainsi de suite.
Nous avons environ 4 clefs par fichier.

Le processus va aussi effacer et recréer tous les index de tous les


fichiers
en éliminant les enregistrements effacés.

Un client installé avec un vieux Pentium 450 et Windows 98 nous a informé


de
son inquiétude que le processus total prenait environ 25 minutes à se
compléter. Selon lui, ce long processus ne cadrait pas avec la vitesse d'
exécution à laquelle il était habitué depuis de nombreuses années avec


cette
application.

Hors, la réindexation seule de ces 36 fichiers (effacer et recréer chacun
des index) prend environ 15 secondes au total. Pas pour chacun des


fichiers,
15 secondes pour les 36 fichiers. Ça c'est de la vitesse!

Nous avons retravaillé la logique du processus mensuel et ce même client
complète maintenant ce processus complet en moins de 3 minutes -
réindexations comprises. Il est très content.

Voilà la vitesse à laquelle nous sommes habitué.

Autre exemple, nous avons un autre magasin qui a à peu près les mêmes
données que cité plus haut sauf que lui, il a plus de 37 000 clients
(membres). Une réindexation complète de ses 36 tables fichiers prend moins
de 30 secondes sur son Pentium 800 (réseau 5 postes avec Windows 98).

Nous ne touchons pas à la base de registre.

Peut-on s'attendre à un rendement semblable avec Windev?

Rien ne nous ferait plus plaisir que de lire des réponses positives.

Cordialement,

Réal Philippon
Programmation Ultra Ltée -o- www.ultra.ca
L'informatique sur mesure depuis plus de 24 ans




Avatar
spetb
> En 7.5 la situation s'est amélioré un peu pour les requêtes avec la


version
206g. Il n'y a plus les ralentissements lors d'accès multi-utilisateurs.


Par
contre, la rapidité est toujours nettement inférieure aux requêtes de


Visual
Foxpro. Pour les 2500 à 4200 enregistrements dans les résultats de nos
tests, c'était à peu près 3 à 5 fois plus lent (env. 2 à 3 secondes au


lieu
de 0.5 à 1 seconde pour VFox, Delphi ou Paradox avec des machines < 1


Ghz).
Cela dépend biensûr aussi du matériel.
Le facteur principal de la lenteur des requêtes Windev / HF est que tous


les
enregistrements du résultat sont lus en mémoire. Quand il n'y a pas de tri
et calcul sur le résultat Windev est plus rapide puisque la lecture est
complété en arrière plan. Il y a des gens qui disent que la 8 est plus
rapide, d'autres disent que c'est toujours lent. Aussi longtemps que les
résultats des requêtes sont lus en mémoire, je déconseille Windev / HF


pour
des gens soucieux de rapidité.



Bonjour,

Pour avoir une vitesse quasi instantanée pour des requetes sur des fichiers
HF, il faut que tous les champs de fichier concernés par la requete soient
indexés, faites l'essai et vous serez surpris. Les résultats sont très
voisins dans ce cas de ceux de VFP.
Nota : Personnellement n'étant pas un fan de SQL j'utilise plutot des
filtres sur les fichiers HF, sur de très gros fichiers c'est encore plus
rapide, par contre ces filtres sont un peu plus difficiles à programmer que
les requetes, mais quand on pratique un peu cela devient vite assez évident.

Sincères Salutations
--
Jean-Claude FLAJOULOT
Sécurité Pointage & Biométrie

(Otez _no_spam pour me contacter en PV)

http://perso.wanadoo.fr/securite.pointage.et.biometrie/
Avatar
mat
Merci pour l'info. On en a déjà parlé l'année passée et j'avais vérifié à
l'époque que j'avais des index sur toutes mes rubriques de liaison et de
tri. Je les ai encore controllé maintenant.

Il y a toujours des rapports sur le NG de PCS de lenteurs avec la 8
(qui devrait être encore optimisé) et dans un exemple, quelqu'un
(probablement un collaborateur anonyme) a confirmé que la fonction TOP
provoquait des ralentissements... Je ne crois pas être trop paresseux de
chercher une solution et j'utilise des requêtes depuis 15 ans sans avoir eu
de gros problèmes. Ce n'était vraiment pas extravagant de relier pour nos
tests les fichiers de commandes/lignes, clients et articles, et trier par
date et numéro de commande (tous les clés indéxés).

Avec Windev en un an de travail, j'ai passée des journées entières pour la
recherche d'optimisations, sans pour autant trouver une solution valable
généralement. Ne faisant non plus confiance à moi seul, j'ai travaillé
dessus avec un spécialiste de SQL. Pour l'instant je n'ai jamais lu que
quelqu'un arrive à faire une requête Windev / HF reliant plusieurs fichiers
en réseau, avec plusieurs milliers de résultats triés, en moins d'une
seconde. Le problème s'aggrave encore quand on a une base avec un minimum de
redondances, p.ex. les lignes de commandes ne contiennent que l'ID du
produit et ne pas celui du groupe de produits ou d'un domaine d'affaires, ce
qui nécessite des "IN" pour sélectionner. Certes, je pourrais accélérer les
requêtes en mettant ces rubriques dans les lignes de commandes. Mais c'est
ça le but de données relationnelles?

En ce qui concerne les filtres, je préfère les requêtes d'abord parce qu'on
travaille sur une copie des données en local (question réseau). Mais aussi
parce que cela me donne plus de flexibilité pour les liaisons et rend toutes
les rubriques triable, sans index.


"spetb" wrote in message
news:c17o3l$dhr$
> En 7.5 la situation s'est amélioré un peu pour les requêtes avec la
version
> 206g. Il n'y a plus les ralentissements lors d'accès multi-utilisateurs.
Par
> contre, la rapidité est toujours nettement inférieure aux requêtes de
Visual
> Foxpro. Pour les 2500 à 4200 enregistrements dans les résultats de nos
> tests, c'était à peu près 3 à 5 fois plus lent (env. 2 à 3 secondes au
lieu
> de 0.5 à 1 seconde pour VFox, Delphi ou Paradox avec des machines < 1
Ghz).
> Cela dépend biensûr aussi du matériel.
> Le facteur principal de la lenteur des requêtes Windev / HF est que tous
les
> enregistrements du résultat sont lus en mémoire. Quand il n'y a pas de


tri
> et calcul sur le résultat Windev est plus rapide puisque la lecture est
> complété en arrière plan. Il y a des gens qui disent que la 8 est plus
> rapide, d'autres disent que c'est toujours lent. Aussi longtemps que les
> résultats des requêtes sont lus en mémoire, je déconseille Windev / HF
pour
> des gens soucieux de rapidité.

Bonjour,

Pour avoir une vitesse quasi instantanée pour des requetes sur des


fichiers
HF, il faut que tous les champs de fichier concernés par la requete soient
indexés, faites l'essai et vous serez surpris. Les résultats sont très
voisins dans ce cas de ceux de VFP.
Nota : Personnellement n'étant pas un fan de SQL j'utilise plutot des
filtres sur les fichiers HF, sur de très gros fichiers c'est encore plus
rapide, par contre ces filtres sont un peu plus difficiles à programmer


que
les requetes, mais quand on pratique un peu cela devient vite assez


évident.

Sincères Salutations
--
Jean-Claude FLAJOULOT
Sécurité Pointage & Biométrie

(Otez _no_spam pour me contacter en PV)

http://perso.wanadoo.fr/securite.pointage.et.biometrie/




Avatar
elecoest
Bonsoir,

Désolé mais certaines réponses vont vous paraitre un peu cavalières de ma
part mais je pense qu'il fallait remettre un peu les idées en place pour les
lecteurs peu coutumier de Windev.

[CUT]
Avec Windev en un an de travail, j'ai passée des journées entières pour la
recherche d'optimisations, sans pour autant trouver une solution valable
généralement.



Des solutions coté base de données ou cote traitement ? Parce que 1 an c'est
long ;-)

Ne faisant non plus confiance à moi seul, j'ai travaillé
dessus avec un spécialiste de SQL.



Un "spécialiste" de SQL t'aurait certainement conseillé de passé sur un SGBD
standard du marché (mais payant !)

Pour l'instant je n'ai jamais lu que
quelqu'un arrive à faire une requête Windev / HF reliant plusieurs


fichiers
en réseau, avec plusieurs milliers de résultats triés, en moins d'une
seconde.



Désolé mais je ne connais que 2 SGBD capable de répondre à ton besoin en
terme de "une seconde" pour des volumétrie en milliers (et millions) :
TERADATA et DB2. Dans les 2 cas on n'est plus dans la même catégorie ! Je
travaille quotidiennement aussi bien avec DB2 que du Oracle et c'est vrai
que des tris, des requêtes avec plus de 5 tables en jointure c'est
faisable...

Le problème s'aggrave encore quand on a une base avec un minimum de
redondances, p.ex. les lignes de commandes ne contiennent que l'ID du
produit et ne pas celui du groupe de produits ou d'un domaine d'affaires,


ce
qui nécessite des "IN" pour sélectionner. Certes, je pourrais accélérer


les
requêtes en mettant ces rubriques dans les lignes de commandes. Mais c'est
ça le but de données relationnelles?



C'est l'inconvénient du SGBDR : à force de tout avoir en 3NF voire 4NF, on
se plaint des temps de réponses ! D'après toi pourquoi les SI-Décisionnels
utilisent la dénormalisation si ce n'est (en autre) par soucis de rapidité.

Pour info pour certains SGBD les IN sont transformés en "...OR...OR", pour
certains SGBD il est préférable d'utiliser la commande EXIST que la commande
IN par contre il vaut mieux NOT IN que NOT EXIST. En gros chaque SGBD a son
propre mode de fonctionnement coté interprétation de requete. Donc évitons
de comparer.

En ce qui concerne les filtres, je préfère les requêtes d'abord parce


qu'on
travaille sur une copie des données en local (question réseau). Mais aussi
parce que cela me donne plus de flexibilité pour les liaisons et rend


toutes
les rubriques triable, sans index.



PC-Soft avait fourni une abaque pour le requetage sur les fichiers : en
fonction de la volumétrie on passe par tel ou tel mode de lecture (filtre,
vue, requete).

Emmanuel
Avatar
Real Philippon
Merci beaucoup pour vos réponses très pertinentes.

J'apprécie vraiment beaucoup de partager vos expériences et cela confirme
mes craintes - mais c'est ce que je désirais, du vécu objectif avec les
performances de Windev.

Je ne veux entrer en compétition avec personne - vous qui avez passé
beaucoup de temps à tenter d'optimiser les performance des requêtes de
Windev mais j'aimerais vous soumettre le résultat de certains tests
d'optimisation que j'ai fait avec le SQL de FoxPro et qui s'applique
peut-être aussi à Windev.

Étant relativement critique sur les performances, j'ai fait de nombreux
tests avec SQL quand il a été disponible avec FoxPro.

A tord ou à raison, et étant de la vieille école, je ne faisais pas tout à
fait confiance aux requêtes complexes SQL et j'avais des doutes à lui
confier une optimisation maximale. Mais j'aime beaucoup le concept et la
performance est en général excellente.

Des requêtes complexes, j'en ai fait plusieurs mais je me suis rendu compte
que rien ne valait mon expérience et mon jugement combiné à SQL au lieu de
lui soumettre aveuglément une requête complexe et espérer que dans tous les
cas l'optimisation serait optimale.

Je m'explique avec un simple exemple. Ce n'est peut-être pas la meilleure,
mais ça donne un idée du concept.

Supposons une recherche des ventes d'une période de 3 mois, par catégories
et par clients dans un journal des ventes de 10 ans cumulés.
Si la base de donnée n'est jamais appelée à devenir immense - selon mon
expérience - ma requête SQL sera directe en une seule commande.

Mais si la base est ou sera éventuellement très volumineuse, je décortique
les ordres SQL.
Par exemple, un première requête ira seulement chercher les 3 mois de ventes
et les placera dans un fichier temporaire.
Je travaille ensuite avec ce fichier temporaire qui est considérablement
plus petit.

FoxPro mentionne qu'un fichier temporaire est placé automatiquement par
défaut dans la mémoire cache et s'il manque de place seulement il le place
sur le disque dur. Il mentionne même que certains fichiers temporaires ne
sont jamais écrit sur disque. Sachant que la mémoire cache est
considérablement plus rapide qu'un disque dur, je savais que j'accélérait
par le fait même ma requête.

Au besoin je fais plusieurs requêtes successives (parfois 4 ou 5) en prenant
bien soin de fermer chaque fichier temporaire précédent dès que j'en ai
terminé, libérant ainsi la mémoire. FoxPro efface automatiquement un fichier
temporaire dès sa fermeture.

J'espère que je m'explique bien.
En fait, c'est qu'au lieu de faire une confiance aveugle à SQL qui est censé
optimiser ses recherches, je le fait pour lui.
C'est un peu plus de lignes de codes mais c'est par contre souvent plus
facile à comprendre 3 ans plus tard quand on a à faire la maintenance sur du
code qu'on a pas touché depuis longtemps.

Dans le cas du TOP 20 - maintenant que je sais que cela ralentit le
processus SQL en Windev - je ferais la recherche sans TOP et place le
résultat dans un fichier temporaire en classant le résultat en DESC et je
vais chercher les 20 premiers dans une autre opération.
Je présume que c'est ce que font plusieurs - mais je ne serais pas étonné
que de nombreux utilisateurs Windev subissent le ralentissement sans
chercher de solution.

Dans FoxPro, j'ai vu de bonnes différences de vitesse dans plusieurs cas.

Je sais qu'à la base, la vitesse de manipulation des fichiers Windev est
plus lente qu'en Fox mais
quelqu'un a-t-il essayé en Windev la méthode que je mentionne ci-dessus? Les
résultats sont-ils de beaucoup améliorés?

Cordialement,

Réal Philippon
Programmation Ultra Ltée -o- www.ultra.ca
L'informatique sur mesure depuis plus de 24 ans

"mat" a écrit dans le message de
news:c187gc$1fr9r8$
Merci pour l'info. On en a déjà parlé l'année passée et j'avais vérifié à
l'époque que j'avais des index sur toutes mes rubriques de liaison et de
tri. Je les ai encore controllé maintenant.

Il y a toujours des rapports sur le NG de PCS de lenteurs avec la 8
(qui devrait être encore optimisé) et dans un exemple, quelqu'un
(probablement un collaborateur anonyme) a confirmé que la fonction TOP
provoquait des ralentissements... Je ne crois pas être trop paresseux de
chercher une solution et j'utilise des requêtes depuis 15 ans sans avoir


eu
de gros problèmes. Ce n'était vraiment pas extravagant de relier pour nos
tests les fichiers de commandes/lignes, clients et articles, et trier par
date et numéro de commande (tous les clés indéxés).

Avec Windev en un an de travail, j'ai passée des journées entières pour la
recherche d'optimisations, sans pour autant trouver une solution valable
généralement. Ne faisant non plus confiance à moi seul, j'ai travaillé
dessus avec un spécialiste de SQL. Pour l'instant je n'ai jamais lu que
quelqu'un arrive à faire une requête Windev / HF reliant plusieurs


fichiers
en réseau, avec plusieurs milliers de résultats triés, en moins d'une
seconde. Le problème s'aggrave encore quand on a une base avec un minimum


de
redondances, p.ex. les lignes de commandes ne contiennent que l'ID du
produit et ne pas celui du groupe de produits ou d'un domaine d'affaires,


ce
qui nécessite des "IN" pour sélectionner. Certes, je pourrais accélérer


les
requêtes en mettant ces rubriques dans les lignes de commandes. Mais c'est
ça le but de données relationnelles?

En ce qui concerne les filtres, je préfère les requêtes d'abord parce


qu'on
travaille sur une copie des données en local (question réseau). Mais aussi
parce que cela me donne plus de flexibilité pour les liaisons et rend


toutes
les rubriques triable, sans index.


"spetb" wrote in message
news:c17o3l$dhr$
> > En 7.5 la situation s'est amélioré un peu pour les requêtes avec la
> version
> > 206g. Il n'y a plus les ralentissements lors d'accès


multi-utilisateurs.
> Par
> > contre, la rapidité est toujours nettement inférieure aux requêtes de
> Visual
> > Foxpro. Pour les 2500 à 4200 enregistrements dans les résultats de nos
> > tests, c'était à peu près 3 à 5 fois plus lent (env. 2 à 3 secondes au
> lieu
> > de 0.5 à 1 seconde pour VFox, Delphi ou Paradox avec des machines < 1
> Ghz).
> > Cela dépend biensûr aussi du matériel.
> > Le facteur principal de la lenteur des requêtes Windev / HF est que


tous
> les
> > enregistrements du résultat sont lus en mémoire. Quand il n'y a pas de
tri
> > et calcul sur le résultat Windev est plus rapide puisque la lecture


est
> > complété en arrière plan. Il y a des gens qui disent que la 8 est plus
> > rapide, d'autres disent que c'est toujours lent. Aussi longtemps que


les
> > résultats des requêtes sont lus en mémoire, je déconseille Windev / HF
> pour
> > des gens soucieux de rapidité.
>
> Bonjour,
>
> Pour avoir une vitesse quasi instantanée pour des requetes sur des
fichiers
> HF, il faut que tous les champs de fichier concernés par la requete


soient
> indexés, faites l'essai et vous serez surpris. Les résultats sont très
> voisins dans ce cas de ceux de VFP.
> Nota : Personnellement n'étant pas un fan de SQL j'utilise plutot des
> filtres sur les fichiers HF, sur de très gros fichiers c'est encore plus
> rapide, par contre ces filtres sont un peu plus difficiles à programmer
que
> les requetes, mais quand on pratique un peu cela devient vite assez
évident.
>
> Sincères Salutations
> --
> Jean-Claude FLAJOULOT
> Sécurité Pointage & Biométrie
>
> (Otez _no_spam pour me contacter en PV)
>
> http://perso.wanadoo.fr/securite.pointage.et.biometrie/
>
>





Avatar
Real Philippon
Merci beaucoup pour vos réponses très pertinentes.

J'apprécie vraiment beaucoup de partager vos expériences et cela confirme
mes craintes - mais c'est ce que je désirais, du vécu objectif avec les
performances de Windev.

Je ne veux entrer en compétition avec personne - vous qui avez passé
beaucoup de temps à tenter d'optimiser les performance des requêtes de
Windev mais j'aimerais vous soumettre le résultat de certains tests
d'optimisation que j'ai fait avec le SQL de FoxPro et qui s'applique
peut-être aussi à Windev.

Étant relativement critique sur les performances, j'ai fait de nombreux
tests avec SQL quand il a été disponible avec FoxPro.

A tord ou à raison, et étant de la vieille école, je ne faisais pas tout à
fait confiance aux requêtes complexes SQL et j'avais des doutes à lui
confier une optimisation maximale. Mais j'aime beaucoup le concept et la
performance est en général excellente.

Des requêtes complexes, j'en ai fait plusieurs mais je me suis rendu compte
que rien ne valait mon expérience et mon jugement combiné à SQL au lieu de
lui soumettre aveuglément une requête complexe et espérer que dans tous les
cas l'optimisation serait optimale.

Je m'explique avec un simple exemple. Ce n'est peut-être pas la meilleure,
mais ça donne un idée du concept.

Supposons une recherche des ventes d'une période de 3 mois, par catégories
et par clients dans un journal des ventes de 10 ans cumulés.
Si la base de donnée n'est jamais appelée à devenir immense - selon mon
expérience - ma requête SQL sera directe en une seule commande.

Mais si la base est ou sera éventuellement très volumineuse, je décortique
les ordres SQL.
Par exemple, un première requête ira seulement chercher les 3 mois de ventes
et les placera dans un fichier temporaire.
Je travaille ensuite avec ce fichier temporaire qui est considérablement
plus petit.

FoxPro mentionne qu'un fichier temporaire est placé automatiquement par
défaut dans la mémoire cache et s'il manque de place seulement il le place
sur le disque dur. Il mentionne même que certains fichiers temporaires ne
sont jamais écrit sur disque. Sachant que la mémoire cache est
considérablement plus rapide qu'un disque dur, je savais que j'accélérait
par le fait même ma requête.

Au besoin je fais plusieurs requêtes successives (parfois 4 ou 5) en prenant
bien soin de fermer chaque fichier temporaire précédent dès que j'en ai
terminé, libérant ainsi la mémoire. FoxPro efface automatiquement un fichier
temporaire dès sa fermeture.

J'espère que je m'explique bien.
En fait, c'est qu'au lieu de faire une confiance aveugle à SQL qui est censé
optimiser ses recherches, je le fait pour lui.
C'est un peu plus de lignes de codes mais c'est par contre souvent plus
facile à comprendre 3 ans plus tard quand on a à faire la maintenance sur du
code qu'on a pas touché depuis longtemps.

Dans le cas du TOP 20 - maintenant que je sais que cela ralentit le
processus SQL en Windev - je ferais la recherche sans TOP et place le
résultat dans un fichier temporaire en classant le résultat en DESC et je
vais chercher les 20 premiers dans une autre opération.
Je présume que c'est ce que font plusieurs - mais je ne serais pas étonné
que de nombreux utilisateurs Windev subissent le ralentissement sans
chercher de solution.

Dans FoxPro, j'ai vu de bonnes différences de vitesse dans plusieurs cas.

Je sais qu'à la base, la vitesse de manipulation des fichiers Windev est
plus lente qu'en Fox mais quelqu'un a-t-il essayé en Windev la méthode que
je mentionne ci-dessus? Les résultats sont-ils de beaucoup améliorés?

Cordialement,

Réal Philippon
Programmation Ultra Ltée -o- www.ultra.ca
L'informatique sur mesure depuis plus de 24 ans

"mat" a écrit dans le message de
news:c187gc$1fr9r8$
Merci pour l'info. On en a déjà parlé l'année passée et j'avais vérifié à
l'époque que j'avais des index sur toutes mes rubriques de liaison et de
tri. Je les ai encore controllé maintenant.

Il y a toujours des rapports sur le NG de PCS de lenteurs avec la 8
(qui devrait être encore optimisé) et dans un exemple, quelqu'un
(probablement un collaborateur anonyme) a confirmé que la fonction TOP
provoquait des ralentissements... Je ne crois pas être trop paresseux de
chercher une solution et j'utilise des requêtes depuis 15 ans sans avoir


eu
de gros problèmes. Ce n'était vraiment pas extravagant de relier pour nos
tests les fichiers de commandes/lignes, clients et articles, et trier par
date et numéro de commande (tous les clés indéxés).

Avec Windev en un an de travail, j'ai passée des journées entières pour la
recherche d'optimisations, sans pour autant trouver une solution valable
généralement. Ne faisant non plus confiance à moi seul, j'ai travaillé
dessus avec un spécialiste de SQL. Pour l'instant je n'ai jamais lu que
quelqu'un arrive à faire une requête Windev / HF reliant plusieurs


fichiers
en réseau, avec plusieurs milliers de résultats triés, en moins d'une
seconde. Le problème s'aggrave encore quand on a une base avec un minimum


de
redondances, p.ex. les lignes de commandes ne contiennent que l'ID du
produit et ne pas celui du groupe de produits ou d'un domaine d'affaires,


ce
qui nécessite des "IN" pour sélectionner. Certes, je pourrais accélérer


les
requêtes en mettant ces rubriques dans les lignes de commandes. Mais c'est
ça le but de données relationnelles?

En ce qui concerne les filtres, je préfère les requêtes d'abord parce


qu'on
travaille sur une copie des données en local (question réseau). Mais aussi
parce que cela me donne plus de flexibilité pour les liaisons et rend


toutes
les rubriques triable, sans index.


"spetb" wrote in message
news:c17o3l$dhr$
> > En 7.5 la situation s'est amélioré un peu pour les requêtes avec la
> version
> > 206g. Il n'y a plus les ralentissements lors d'accès


multi-utilisateurs.
> Par
> > contre, la rapidité est toujours nettement inférieure aux requêtes de
> Visual
> > Foxpro. Pour les 2500 à 4200 enregistrements dans les résultats de nos
> > tests, c'était à peu près 3 à 5 fois plus lent (env. 2 à 3 secondes au
> lieu
> > de 0.5 à 1 seconde pour VFox, Delphi ou Paradox avec des machines < 1
> Ghz).
> > Cela dépend biensûr aussi du matériel.
> > Le facteur principal de la lenteur des requêtes Windev / HF est que


tous
> les
> > enregistrements du résultat sont lus en mémoire. Quand il n'y a pas de
tri
> > et calcul sur le résultat Windev est plus rapide puisque la lecture


est
> > complété en arrière plan. Il y a des gens qui disent que la 8 est plus
> > rapide, d'autres disent que c'est toujours lent. Aussi longtemps que


les
> > résultats des requêtes sont lus en mémoire, je déconseille Windev / HF
> pour
> > des gens soucieux de rapidité.
>
> Bonjour,
>
> Pour avoir une vitesse quasi instantanée pour des requetes sur des
fichiers
> HF, il faut que tous les champs de fichier concernés par la requete


soient
> indexés, faites l'essai et vous serez surpris. Les résultats sont très
> voisins dans ce cas de ceux de VFP.
> Nota : Personnellement n'étant pas un fan de SQL j'utilise plutot des
> filtres sur les fichiers HF, sur de très gros fichiers c'est encore plus
> rapide, par contre ces filtres sont un peu plus difficiles à programmer
que
> les requetes, mais quand on pratique un peu cela devient vite assez
évident.
>
> Sincères Salutations
> --
> Jean-Claude FLAJOULOT
> Sécurité Pointage & Biométrie
>
> (Otez _no_spam pour me contacter en PV)
>
> http://perso.wanadoo.fr/securite.pointage.et.biometrie/
>
>





Avatar
mat
Bonjour Real, et merci pour les conseils. Sous DOS je travaillais d'une
manière extensive avec des enchaînement de requêtes pour les raisons
données. C'est également un fait que je n'ai pas suivi cette voie avec
Windev, surtout pour deux raisons: 1) Sauf erreur fondamental de ma part,
au début on ne pouvait pas utiliser le résultat d'une requête pour une
autre. 2) Quand c'était devenu possible je l'ai testé et c'était super lent.
En fin de compte, j'ai commencé à utiliser davantage des requêtes SQL. En
fait, ça fait longtemps que je n'ai plus regardé ce point et je vais m'en
occuper de nouveau.

A part cela, les lenteurs dont je parlais étaient des choses vraiment
basiques, en comparaison directe avec d'autres produits tels que Visual
Foxpro, Delphi et Paradox. Aucune optimisation a été nécessaire pour ces
derniers pour obtenir des résultats bien meilleurs.

Salutations
Mat


"Real Philippon" a écrit dans le message de
news:gtQZb.73629$%
Merci beaucoup pour vos réponses très pertinentes.

J'apprécie vraiment beaucoup de partager vos expériences et cela confirme
mes craintes - mais c'est ce que je désirais, du vécu objectif avec les
performances de Windev.

Je ne veux entrer en compétition avec personne - vous qui avez passé
beaucoup de temps à tenter d'optimiser les performance des requêtes de
Windev mais j'aimerais vous soumettre le résultat de certains tests
d'optimisation que j'ai fait avec le SQL de FoxPro et qui s'applique
peut-être aussi à Windev.

Étant relativement critique sur les performances, j'ai fait de nombreux
tests avec SQL quand il a été disponible avec FoxPro.

A tord ou à raison, et étant de la vieille école, je ne faisais pas tout à
fait confiance aux requêtes complexes SQL et j'avais des doutes à lui
confier une optimisation maximale. Mais j'aime beaucoup le concept et la
performance est en général excellente.

Des requêtes complexes, j'en ai fait plusieurs mais je me suis rendu


compte
que rien ne valait mon expérience et mon jugement combiné à SQL au lieu de
lui soumettre aveuglément une requête complexe et espérer que dans tous


les
cas l'optimisation serait optimale.

Je m'explique avec un simple exemple. Ce n'est peut-être pas la meilleure,
mais ça donne un idée du concept.

Supposons une recherche des ventes d'une période de 3 mois, par catégories
et par clients dans un journal des ventes de 10 ans cumulés.
Si la base de donnée n'est jamais appelée à devenir immense - selon mon
expérience - ma requête SQL sera directe en une seule commande.

Mais si la base est ou sera éventuellement très volumineuse, je décortique
les ordres SQL.
Par exemple, un première requête ira seulement chercher les 3 mois de


ventes
et les placera dans un fichier temporaire.
Je travaille ensuite avec ce fichier temporaire qui est considérablement
plus petit.

FoxPro mentionne qu'un fichier temporaire est placé automatiquement par
défaut dans la mémoire cache et s'il manque de place seulement il le place
sur le disque dur. Il mentionne même que certains fichiers temporaires ne
sont jamais écrit sur disque. Sachant que la mémoire cache est
considérablement plus rapide qu'un disque dur, je savais que j'accélérait
par le fait même ma requête.

Au besoin je fais plusieurs requêtes successives (parfois 4 ou 5) en


prenant
bien soin de fermer chaque fichier temporaire précédent dès que j'en ai
terminé, libérant ainsi la mémoire. FoxPro efface automatiquement un


fichier
temporaire dès sa fermeture.

J'espère que je m'explique bien.
En fait, c'est qu'au lieu de faire une confiance aveugle à SQL qui est


censé
optimiser ses recherches, je le fait pour lui.
C'est un peu plus de lignes de codes mais c'est par contre souvent plus
facile à comprendre 3 ans plus tard quand on a à faire la maintenance sur


du
code qu'on a pas touché depuis longtemps.

Dans le cas du TOP 20 - maintenant que je sais que cela ralentit le
processus SQL en Windev - je ferais la recherche sans TOP et place le
résultat dans un fichier temporaire en classant le résultat en DESC et je
vais chercher les 20 premiers dans une autre opération.
Je présume que c'est ce que font plusieurs - mais je ne serais pas étonné
que de nombreux utilisateurs Windev subissent le ralentissement sans
chercher de solution.

Dans FoxPro, j'ai vu de bonnes différences de vitesse dans plusieurs cas.

Je sais qu'à la base, la vitesse de manipulation des fichiers Windev est
plus lente qu'en Fox mais
quelqu'un a-t-il essayé en Windev la méthode que je mentionne ci-dessus?


Les
résultats sont-ils de beaucoup améliorés?

Cordialement,

Réal Philippon
Programmation Ultra Ltée -o- www.ultra.ca
L'informatique sur mesure depuis plus de 24 ans

"mat" a écrit dans le message de
news:c187gc$1fr9r8$
> Merci pour l'info. On en a déjà parlé l'année passée et j'avais vérifié


à
> l'époque que j'avais des index sur toutes mes rubriques de liaison et de
> tri. Je les ai encore controllé maintenant.
>
> Il y a toujours des rapports sur le NG de PCS de lenteurs avec la 8
> (qui devrait être encore optimisé) et dans un exemple, quelqu'un
> (probablement un collaborateur anonyme) a confirmé que la fonction TOP
> provoquait des ralentissements... Je ne crois pas être trop paresseux de
> chercher une solution et j'utilise des requêtes depuis 15 ans sans avoir
eu
> de gros problèmes. Ce n'était vraiment pas extravagant de relier pour


nos
> tests les fichiers de commandes/lignes, clients et articles, et trier


par
> date et numéro de commande (tous les clés indéxés).
>
> Avec Windev en un an de travail, j'ai passée des journées entières pour


la
> recherche d'optimisations, sans pour autant trouver une solution valable
> généralement. Ne faisant non plus confiance à moi seul, j'ai travaillé
> dessus avec un spécialiste de SQL. Pour l'instant je n'ai jamais lu que
> quelqu'un arrive à faire une requête Windev / HF reliant plusieurs
fichiers
> en réseau, avec plusieurs milliers de résultats triés, en moins d'une
> seconde. Le problème s'aggrave encore quand on a une base avec un


minimum
de
> redondances, p.ex. les lignes de commandes ne contiennent que l'ID du
> produit et ne pas celui du groupe de produits ou d'un domaine


d'affaires,
ce
> qui nécessite des "IN" pour sélectionner. Certes, je pourrais accélérer
les
> requêtes en mettant ces rubriques dans les lignes de commandes. Mais


c'est
> ça le but de données relationnelles?
>
> En ce qui concerne les filtres, je préfère les requêtes d'abord parce
qu'on
> travaille sur une copie des données en local (question réseau). Mais


aussi
> parce que cela me donne plus de flexibilité pour les liaisons et rend
toutes
> les rubriques triable, sans index.
>
>
> "spetb" wrote in message
> news:c17o3l$dhr$
> > > En 7.5 la situation s'est amélioré un peu pour les requêtes avec la
> > version
> > > 206g. Il n'y a plus les ralentissements lors d'accès
multi-utilisateurs.
> > Par
> > > contre, la rapidité est toujours nettement inférieure aux requêtes


de
> > Visual
> > > Foxpro. Pour les 2500 à 4200 enregistrements dans les résultats de


nos
> > > tests, c'était à peu près 3 à 5 fois plus lent (env. 2 à 3 secondes


au
> > lieu
> > > de 0.5 à 1 seconde pour VFox, Delphi ou Paradox avec des machines <


1
> > Ghz).
> > > Cela dépend biensûr aussi du matériel.
> > > Le facteur principal de la lenteur des requêtes Windev / HF est que
tous
> > les
> > > enregistrements du résultat sont lus en mémoire. Quand il n'y a pas


de
> tri
> > > et calcul sur le résultat Windev est plus rapide puisque la lecture
est
> > > complété en arrière plan. Il y a des gens qui disent que la 8 est


plus
> > > rapide, d'autres disent que c'est toujours lent. Aussi longtemps que
les
> > > résultats des requêtes sont lus en mémoire, je déconseille Windev /


HF
> > pour
> > > des gens soucieux de rapidité.
> >
> > Bonjour,
> >
> > Pour avoir une vitesse quasi instantanée pour des requetes sur des
> fichiers
> > HF, il faut que tous les champs de fichier concernés par la requete
soient
> > indexés, faites l'essai et vous serez surpris. Les résultats sont très
> > voisins dans ce cas de ceux de VFP.
> > Nota : Personnellement n'étant pas un fan de SQL j'utilise plutot des
> > filtres sur les fichiers HF, sur de très gros fichiers c'est encore


plus
> > rapide, par contre ces filtres sont un peu plus difficiles à


programmer
> que
> > les requetes, mais quand on pratique un peu cela devient vite assez
> évident.
> >
> > Sincères Salutations
> > --
> > Jean-Claude FLAJOULOT
> > Sécurité Pointage & Biométrie
> >
> > (Otez _no_spam pour me contacter en PV)
> >
> > http://perso.wanadoo.fr/securite.pointage.et.biometrie/
> >
> >
>
>
>




Avatar
mat
D'abord merci pour les infos concernant SQL et SGBD. Je vais suivre les
recommandations.

J'ai vérifié mes archives et présente toutes mes excuses pour une erreur sur
le nombre de résultats dans les test exécutés l'année passée: c'étaient en
fait environs 260 enregistrements sur des fichiers avec 2700/4200 enr. J''ai
re-testé sous la 206g (données sur W2K Pro au lieu NT4) et les temps pour un
résultat d'env. 4200 enregistrement donne 2-3 secondes pour Paradox7 et 8 à
9 secondes pour Windev/HF 7.5. Les paramètres des tests de l'année passée se
trouvent à la fin. Pour le reste, je pense avoir mal communiqué mon point de
vue.

Je voulais expliquer que j'ai investi une année de travail dans le
développement d'une application, dont plusieurs journées étaient consacrées
uniquement à l'optimisation de requêtes, sans avoir trouvé une solution
satisfaisante. Ceci pour dire que je n'ai pas débuté la semaine passée avec
Windev.

En ce qui concerne les SGBD, nous vivons dans un univers différent. Je
développe pour un secteur où on travaille avec des fichiers de quelques
milliers à un maximum de quelque dizaines de milliers d'enregistrements. Je
préfère travailler avec une base de donnée intégrée, pas pour des raison de
coût mais de simplicité. J'aime l'éditeur de fenêtres, d'états et de code de
Windev. Je suis aussi content de la vitesse de HF avec les commandes H..,
mais je suis déçu des performances des requêtes HF 7.5

Je ne veux pas demander l'impossible. Je me trouve parfaitement dans le
cadre de taille des fichiers pour lesquels PCS conseillaient les requêtes:
résultats de 10 à 1000 enr. dans la plupart des cas et quelques fois de 1000
à plusieurs milliers (req. conseillé pour des sélections multi-fichiers).
Pour vérifier mon opinion sur la performance, j'ai comparé les requêtes HF
avec des produits comparables: Visual Foxpro (5 /6), Paradox7 et, pour
intérêt, Delphi 5 avec fichiers Paradox via BDE.

Mon message devait être, que dans les tests avec des requêtes relativement
simples comme celle décrit ci-bas, Windev / HF 7.5 est notablement plus lent
que les contre-parts des autres produits, et que vraisemblablement la
différence réside dans le fait que Windev lit en mémoire le résultat tandis
que les autres produits ne le font pas. Et que cela n'est pas un cas isolé
avec des circonstances particulières. Ni plus, ni moins. Espérons que WD8
sera vraiment plus performant que la 7.5. J'espère avoir été plus clair
cette fois.

Salutations
Mat


Fichiers testés:
Commandes avec env. 2700 enregistrements, lignes de commandes avec 4200,
clients avec 900 et produits avec 600 enregistrements.
Résultat:
env. 260 enregistrements
Liaisons:
Commandes =>LignesCommandes: ID Commande
Commandes => Clients: ID Client
LignesCommandes => Articles: ID Produit
Tri:
descendant sur Date, ascendant sur ID commande.
Index sur toutes les rubriques de sélection et tri.
Requêtes fait avec l'éditeur de requêtes de chacun des produits, sans aucune
optimisation ultérieure.
Affichage de tous les rubriques Commandes et LignesCommandes, plus le nom du
client et du produit.
Version Windev à l'époque: 204g
Temps d'exécution pour Windev: 2.5 à 3 secondes, Visual Foxpro et Paradox:
moins d'une à une seconde.
Machines PIII 650 (Pdox/Delphi) et 800 Mhz (VFox), avec les données sur
serveur NT4. Il n'y avait pour ainsi dire pas d'autre utilisation du réseau
pendant les tests.

La même test exécuté sous la version 75206g donne à peu près le même
résultat.



"elecoest" a écrit dans le message de
news:c18j1l$t5l$
Bonsoir,

Désolé mais certaines réponses vont vous paraitre un peu cavalières de ma
part mais je pense qu'il fallait remettre un peu les idées en place pour


les
lecteurs peu coutumier de Windev.

> [CUT]
> Avec Windev en un an de travail, j'ai passée des journées entières pour


la
> recherche d'optimisations, sans pour autant trouver une solution valable
> généralement.

Des solutions coté base de données ou cote traitement ? Parce que 1 an


c'est
long ;-)

> Ne faisant non plus confiance à moi seul, j'ai travaillé
> dessus avec un spécialiste de SQL.

Un "spécialiste" de SQL t'aurait certainement conseillé de passé sur un


SGBD
standard du marché (mais payant !)

> Pour l'instant je n'ai jamais lu que
> quelqu'un arrive à faire une requête Windev / HF reliant plusieurs
fichiers
> en réseau, avec plusieurs milliers de résultats triés, en moins d'une
> seconde.

Désolé mais je ne connais que 2 SGBD capable de répondre à ton besoin en
terme de "une seconde" pour des volumétrie en milliers (et millions) :
TERADATA et DB2. Dans les 2 cas on n'est plus dans la même catégorie ! Je
travaille quotidiennement aussi bien avec DB2 que du Oracle et c'est vrai
que des tris, des requêtes avec plus de 5 tables en jointure c'est
faisable...

>Le problème s'aggrave encore quand on a une base avec un minimum de
> redondances, p.ex. les lignes de commandes ne contiennent que l'ID du
> produit et ne pas celui du groupe de produits ou d'un domaine


d'affaires,
ce
> qui nécessite des "IN" pour sélectionner. Certes, je pourrais accélérer
les
> requêtes en mettant ces rubriques dans les lignes de commandes. Mais


c'est
> ça le but de données relationnelles?

C'est l'inconvénient du SGBDR : à force de tout avoir en 3NF voire 4NF, on
se plaint des temps de réponses ! D'après toi pourquoi les SI-Décisionnels
utilisent la dénormalisation si ce n'est (en autre) par soucis de


rapidité.

Pour info pour certains SGBD les IN sont transformés en "...OR...OR", pour
certains SGBD il est préférable d'utiliser la commande EXIST que la


commande
IN par contre il vaut mieux NOT IN que NOT EXIST. En gros chaque SGBD a


son
propre mode de fonctionnement coté interprétation de requete. Donc évitons
de comparer.

> En ce qui concerne les filtres, je préfère les requêtes d'abord parce
qu'on
> travaille sur une copie des données en local (question réseau). Mais


aussi
> parce que cela me donne plus de flexibilité pour les liaisons et rend
toutes
> les rubriques triable, sans index.

PC-Soft avait fourni une abaque pour le requetage sur les fichiers : en
fonction de la volumétrie on passe par tel ou tel mode de lecture (filtre,
vue, requete).

Emmanuel