PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Lenteurs et fonctionnement étrange AN Mysql
Lenteurs et fonctionnement étrange AN Mysql
Débuté par Johan C., 13 mai 2025 12:12 - 6 réponses
Membre enregistré
19 messages
Posté le 13 mai 2025 - 12:12
Bonjour à tous.
Depuis la migration en WD2025 (depuis WD28), j'ai constaté un changement dans la gestion des connexions (accès natif Mysql + Mysql 8.0).

Premièrement, j'avais un code qui était appelé en boucle toutes les 50ms qui contenait un variable locale de type connexion. Ce code était appelé tant qu'un enregistrement dans la BDD n'était pas à null.
En Windev 28 : aucun soucis.
En Windev 2025 : une connexion est ouverte sur le serveur Mysql à chaque boucle et n'est pas détruite à la fin du traitement.
J'ai ajouté un HFermeConnexion à la fin du traitement pour résoudre le problème.

Deuxièmement, nous avons remarqué un ralentissement général des requêtes.
J'ai testé en récupérant la dernière version WD28 du projet, je l'ai convertit en WD2025 (pour éliminer les éventuelles modifications qu'on aurait fait depuis la migration) et les résultats sont sans appel, c'est du x2 pour consulter une fiche (3s -> 6s).

Auriez-vous constaté les mêmes changements concernant l'accès natif Mysql ?
Auriez-vous des pistes ?
Merci beaucoup.
Membre enregistré
19 messages
Posté le 13 mai 2025 - 14:24
Je continue mes investigations.
J’ai créé deux nouveaux projets, qui ne font qu’une boucle dans laquelle j’appelle une procédure globale qui exécute une requête.
En Windev 28 : aucune connexion n’est présente à la fin de la boucle sur le serveur Mysql.
En Windev 2025 : les 10 connexions existent toujours à la fin de la boucle. Par contre, lorsque je mets le code de la procédure globale directement dans la boucle, tout fonctionne correctement, il n’y a plus de connexion à la fin de la boucle.

Voici la procédure globale :
Procedure F_Bloquer()
v_sql est une chaîne // Le code SQL de la requête
v_req est une Source dede Données // La requête
v_connexion est une Connexion

/////////////////////////////////////////
////// Initialisation des éléments //////
/////////////////////////////////////////
v_connexion..Serveur = **SERVEUR**
v_connexion..Provider = hAccèsNatifMySQL
v_connexion..Utilisateur = **USER**
v_connexion..MotDePasse = **MDP**
v_connexion..BaseDeDonnées= **BDD**

////////////////////////////////
////// On vérifie le lock //////
////////////////////////////////
v_sql = [
SELECT 1
]
SI PAS HExécuteRequêteSQL(v_req, v_connexion, hRequêteSansCorrection, v_sql) ALORS
Erreur("Erreur lors de l'exécution de la requete !" + RC + HErreurInfo())
RENVOYER Faux
FIN
HLitPremier(v_req)
SI HEnDehors(v_req) ALORS
Erreur("Aucun résultat !")
RENVOYER Faux
FIN
HAnnuleDéclaration(v_req)
RENVOYER Vrai


Voici le code de mon unique bouton de mon unique fenêtre :
POUR i = 1 À 10
F_Bloquer()
FIN

ToastAffiche("Les 10 passages sont terminés",toastCourt,cvMilieu,chCentre)
Membre enregistré
290 messages
Posté le 13 mai 2025 - 15:32
Bonjour,
Je ne suis pas encore passé à WD2025 (je suis toujours sous WD2024)
Néanmoins, le problème que tu rencontres m'intéresse car je vais basculer prochainement.

J'ai donc testé ton code dans tous les sens avec les 2 compilateurs (procédure globale, locale ou code dans la boucle POUR) mais je n'arrive pas à reproduire le phénomène !
Par contre je fais un HOuvreConnexion(v_connexion) lors de l'ouverture de la fenêtre afin de connecter ma base MySQL (je ne le vois nulle part dans ton exemple)
A la fin de la boucle, je reste connecté et j'ai seulement 1 seule connexion qui persiste. Ce qui est logique puisque HFermeConnexion(v_connexion) n'est pas appelé.

Quand aux performances, je ne constate aucun ralentissement.

Pour info :
Ma base MySQL est une version 8.0.32
Libmysql.dll 64bits version 5.6.17
Important : j'effectue le test "exécutable compilé" et surtout pas en mode GO car l’analyseur temps réel ralenti énormément le processus

Cdt
Membre enregistré
19 messages
Posté le 13 mai 2025 - 16:47
Merci pour la réponse !!
Concernant le HOuvreConnexion, effectivement je n'en fais pas, mais les requêtes fonctionnent quand même.
Si tu mets le HOuvreConnexion dans la fenêtre, la variable locale connexion ne sert plus à rien.
Or, c'est là que se situe le problème, j'ai besoin d'utiliser une variable locale (je ne sais plus vraiment pourquoi, par rapport aux transactions je crois).
Sans le HOuvreConnexion, tu ne reproduis pas le problème ?

Concernant les lenteurs, elles sont bien présentes dans mon exécutable compilé ... et en prod ;(
Membre enregistré
290 messages
Posté le 13 mai 2025 - 17:08
Effectivement, sous WD2024, la connexion est libérée "automatiquement" lorsque la procédure se termine.
Ce n'est plus le cas sous WD2025.
Je te suggère de faire remonter cette différence de comportement au support (je vais en faire de même)
La solution que je vois pour l'instant consiste à faire un HFermeConnexion() avant chaque RENVOYER ou de déclarer v_connexion dans le code d'ouverture de la fenêtre (ou du projet)
Pour info : J'utilise les transactions avec MySQL depuis plusieurs années et il n'est pas nécessaire que la variable soit locale
Message modifié, 13 mai 2025 - 17:26
Membre enregistré
19 messages
Posté le 14 mai 2025 - 08:47
J'ai transmis un projet en WD28 et WD2025 au support technique.
En plus de ce changement de comportement, j'ai des problèmes de lenteurs et aussi des messages d'erreurs "Lost connection to MySQL server during query", lorsque les PC sortent de veille ou que l'application n'est pas utilisée pendant un moment, on n'avait pas ces erreurs en WD28.
Membre enregistré
19 messages
Posté le 14 mai 2025 - 16:29
Du nouveau dans mes investigations.
Dans mes projets quasi-vierges WD28 et WD2024, j'ai créé un bouton qui a ce code :
AnalyseurDébut()
POUR i = 1 À 100
ToastSupprimeTout()
ToastAffiche("Toast " + i,toastCourt,cvMilieu,chCentre)
FIN
AnalyseurFin()


En WD28 : on ne voit pas les toasts -> résultat : 1.2s




En WD2025 : on peut bien lire chaque toast -> résultat : 25.2s !!!!




Après désactivation des animations des fenêtres du projet : très rapide -> résultat 1.6s.




Mes lenteurs seraient dues à la gestion des toasts ;(
Message modifié, 14 mai 2025 - 16:30