PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → Processeur saturé (Windev 22)
Processeur saturé (Windev 22)
Débuté par Nicolas, 29 aoû. 2018 20:23 - 2 réponses
Membre enregistré
8 messages
Posté le 29 août 2018 - 20:23
Bonjour,

Je développe une petite application de langue, composé de cours, d'exercices et d'examen (pour valider les acquis).

Je me retrouve face à un problème lié au processeur. En effet, lorsque j’exécute mon programme (Sous Windev 22), celui-ci charge un grand nombre de données via des requêtes SQL pour remplir des champs et des variables (table et zone répétée (dictionnaire par exemple), structure...). Le chargement dure environ 10 secondes (30 secondes sur une machine moins performantes).

Le problème est que pendant ce temps de chargement, le processeur est saturé (utilisation à 100%)

A la fin du chargement (fin du remplissage des champs et des variables), le processeur redevient « Normal » (quasiment 0%).

Ensuite, une fois l'application chargé, le programme exécute une boucle infini, avec des requêtes SQL, pour savoir si il y a des cours ou des exercices à proposer à l'utilisateur en fonction de son niveau et de sa progression. Le processeur tourne alors à 60% indéfiniment (jusqu'à fermeture du programme).

Comme beaucoup de choses sont liées à l'IHM, je ne peux pas utiliser de tâches parallèles. Je pense ne pas avoir compris comment est utilisé le processeur, ni ce qu'il faudrait faire pour réduire les ressources utilisées.

Je viens donc vous demander votre aide, car les ressources matérielles sont quelque chose que je ne maîtrise pas, et c'est un point important en programmation.

Merci d'avance pour vos réponses.

Cordialement,
Membre enregistré
16 messages
Posté le 30 août 2018 - 17:20
Bonjour.

Il y a quelques années (hé oui... :p), j'avais un souci similaire avec la RAM.

Voici le code que j'ai utilisé ; ça te donnera peut-être des idées pour la partie processeur...
// Procédure automatique :
// La procédure est exécutée automatiquement, après le code d'initialisation de la fenêtre, avec un différé de 2 secondes
// Elle sera répétée en boucle, en attendant 2 secondes entre chaque appel
// Chaque appel suivant exécute une seule fois la procédure, sans timer
//

Procedure Vidage_Memoire_RAM()
nHdl est un entier
//LaVersionWindows est une chaîne = SysVersionWindows()

SI SysVersionWindows() _DANS_ ("NT 3.5", "NT 4", "NT 5", "XP", "VISTA", "7", "8", "2003S", "2008S", "2012S") ALORS
nHdl = API("KERNEL32","GetCurrentProcess")
API("KERNEL32","SetProcessWorkingSetSize",nHdl,-1,-1)
FIN
Membre enregistré
948 messages
Popularité : +30 (92 votes)
Posté le 30 août 2018 - 18:00
Coucou,

BHF37, je suis pas d'accord, et spécialement dans ce cas c'est une connerie.


Comme beaucoup de choses sont liées à l'IHM, je ne peux pas utiliser de tâches parallèles.

Si tu utilise la constante tpoThreadPrincipale c'est fait pour ^^
Reference: https://doc.pcsoft.fr/?1000021220&verdisp=160

Regarde du coté des fonctions multitache(-1) / MultitâcheRepeint
Reference: https://doc.pcsoft.fr/?3015004&verdisp=210

Parallélisez les traitements dans vos applications pour gagner en performance et en fluidité.

Reference:


--
In üs we trust - #92i
Message modifié, 30 août 2018 - 18:03