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

[WD7.5 - 9] Firebird/Interbase => fb4WD / SQLManagerX

2 réponses
Avatar
mat
Bonjour,

Emmanuel Lecoester a équipé mon projet test des classes requises et
d'une fenêtre avec table mémoire. Ca change totalement le contexte du
test puisque les autres trois tests se faisaient avec des tables
fichiers. Encore merci à Emmanuel, car la tâche n'a pas été si simple.
Firebird/Interbase préfèrent majuscules pour les noms de fichiers et
rubriques, sinon sous WD7.5 il faut mettre des guillemets doubles autour...

Remarques concernant le test:

- WD7.5 a été utilisé pour le test de fb4WD
- l'alimentation d'une table fichier se fait automatiquement en arrière
plan. Le requêteur Windev rend la main au programme après avoir rempli
les lignes visibles de la table.
- l'alimentation d'une table mémoire via fb4WD se fait dans le thread
principal, donc mieux le mettre dans un thread séparé, ce qui marche
très bien. Pour cette comparaison ce n'était pas possible, car on ne
pourrait plus mesurer le temps. Le temps total pour exécuter la requête
et remplir la table prend environs 4 secondes, dont 0.5-0.7 sont à
attribuer à la lecture du résultat et 2.7-3 secondes pour ajouter les
lignes à la table. Restent environs 0.5 secondes pour exécuter la requête.
- Afin de pouvoir comparer la performance, les conditions suivantes sont
respectées: 1) la totalité du résultat de la requête doit être
accessible (dernier enregistrement lisible), 2) la table est visible, 3)
les lignes visibles de la table sont remplies.
- Pour la table mémoire fb4WD/SQLMX on exécute la requête pas dans les
déclarations globales, mais l'initialisation de la fenêtre, donc plus
tard dans le procédé d'ouverture. Le temps se mesure dans la boucle de
remplissage de table à la 25e ligne. La dernière colonne de la table
ci-basse donne le résultat.
WD9/OLEDB WD7.5
HFClass HFC/S Firebird fb4WD
Enregistrements 4000 4000 4500 4500
Première ouverture 3.6 2.7 1.4 s 0.6-1.3*
Temps moyen ouverture 12.0 1.7 1.1 s 0.4-0.9*
Usage RAM serveur début --- 3.4 3.2 MB
Usage RAM serveur 10 ouv. --- 9.7 6.2 MB
Boucle avec message 0.2 0.3 0.7 s 1.0-3.7

* Je n'ai pas eu le temps de m'informer à fonds sur les fonctions de
fb4WD. L'alimentation de la table se fait par un fetch ligne par ligne.
Si ce n'est pas possible d'accéder directement la dernière ligne du
résultat, il faut ajouter 0.5-0.7 secondes ce qui explique la plage
donnée (0.6 + 0.7 = 1.3).

Puisque je ne sais pour ainsi dire rien sur les Accès[Alternatifs], pour
la boucle sur le résultat, je l'ai fait sur la table mémoire. Elle prend
3.7 secondes pour afficher l'IDCommande des 4500 enregistrements, et 1
seconde sans données de la table mais d'un compteur de lignes. Si on le
fait avec le même type de boucle utilisé par l'alimentation de la table,
cela prend 2.6 secondes. C'est toujours nettement plus long qu'une
boucle POUR TOUS de HF, dont le résultat est totalement en mémoire. Mais
de point de vue pratique ce n'est pas si important pour moi, car dans
cette boucle je fais des choses que je ne peux pas ou ne veux pas faire
dans la requête. Ces traitements, on peut les inclure directement dans
la boucle d'alimentation de la table mémoire.

Quelques tests en réseau local ont montré que l'accès à Firebird via
fb4WD est pour ainsi dire aussi rapide qu'en local. Faut également dire
que l'installation du serveur Firebird est extrêmement simple: download
2.7MB, 2 questions à l'installation "Service ou application",
"Chargement automatique ou manuel?". Voilà, c'est tout. La commande pour
la connexion à la base de test (locale):

v_retCode = fb4wd:mySQLConnecte("localhost","C:\Mes
Projets\fbTest_SQLMX\Exe\fbTRADING.fdb", "SYSDBA", "masterkey")

La boucle pour alimenter la table mémoire, de préférence dans un thread
séparé:

PROCEDURE FillTable(vReqNum)
TANTQUE fb4wd:mySQLFetch(vReqNum)
i++
TableAjoute("TABLE", fb4wd:mySQLLitLigne(vReqNum))
SI i = 25 ALORS
MultitacheRepeint // la table s'affiche "remplie", l'alimentation
continue en arrière plan
FIN
FIN


Chose que je n'avais pas remarqué auparavant: les tables fichiers avec
accès ODBC via OLE DB ont des fois des problèmes d'affichage (dernièrs
enregistrements, retour au début, etc). Je ne sais pas si c'est normal
avec ce type d'accès ou dû au pilote utilisé. Il faut probablement
utiliser des tables mémoire pour des bases autre que HF.

Dans l'exemple OLE DB de Windev ça marche, mais la table est attaché
directement au fichier, pas à une requête.

Salutations
mat

2 réponses

Avatar
Emmanuel Lecoester
"mat" a écrit dans le message de
news:
Bonjour,

Emmanuel Lecoester a équipé mon projet test des classes requises et
d'une fenêtre avec table mémoire. Ca change totalement le contexte du
test puisque les autres trois tests se faisaient avec des tables
fichiers. Encore merci à Emmanuel, car la tâche n'a pas été si simple.
Firebird/Interbase préfèrent majuscules pour les noms de fichiers et
rubriques, sinon sous WD7.5 il faut mettre des guillemets doubles


autour...

[CUT]

Merci mat pour ce petit bench. Normalement tu peux compiler le projet en WD9
pour être à iso-environnement technique.

WD9/OLEDB WD7.5
HFClass HFC/S Firebird fb4WD
Enregistrements 4000 4000 4500 4500
Première ouverture 3.6 2.7 1.4 s 0.6-1.3*
Temps moyen ouverture 12.0 1.7 1.1 s 0.4-0.9*
Usage RAM serveur début --- 3.4 3.2 MB
Usage RAM serveur 10 ouv. --- 9.7 6.2 MB
Boucle avec message 0.2 0.3 0.7 s 1.0-3.7



[CUT]

çà me rappelle les benchs de Eric.

Nous allons regarder plus en détails la boucle avec message pour avoir dès
l'execution de la requete le nombre d'enregistrements (H.nbenr).

Quelques tests en réseau local ont montré que l'accès à Firebird via
fb4WD est pour ainsi dire aussi rapide qu'en local. Faut également dire
que l'installation du serveur Firebird est extrêmement simple: download
2.7MB, 2 questions à l'installation "Service ou application",
"Chargement automatique ou manuel?". Voilà, c'est tout. La commande pour
la connexion à la base de test (locale):



C'est vrai que c'est là un avantage indeniable : les temps constatés en
local seront quasiment ceux constatés en réseau (ajouter le temps de
transpport réseau) même avec un nombre conséquent d'utilisateurs (impacts
sur la charge serveur).

--
Emmanuel
Avatar
mat
Emmanuel Lecoester wrote:
Merci mat pour ce petit bench. Normalement tu peux compiler le projet en WD9
pour être à iso-environnement technique.



ok, fait et ça donne la même chose.

mat