Améliorer la rapidité du code

Résolu
minimarch Messages postés 31 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 février 2006 - 23 mars 2005 à 12:11
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 - 23 mars 2005 à 16:19
Bonjour,

je suis en train de réaliser un éditeur de langage basique. Il permettra de mettre en couleur les mots clés, les commentaires... et peut-être plus par la suite.

Ma fonction de coloration marche correctement, mais l'appelant à chaque modification de texte (même pour un simple retour à la ligne), elle fait considérablement ramer le programme sur des fichiers importants.

Pour info, j'utilise un RichTextBox et je renvoie donc le texte au format RTF.

Y a-t-il un moyen d'améliorer la rapidité du code, en jouant sur les moments où j'appelle la fonction, ou en permettant son exécution en parallèle, voire en utilisant un autre contrôle ?

MiniMarch'

8 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 mars 2005 à 15:20
Un thread est une sorte de deuxième programme lancé en paralèle de ton
programme principal. Il utilise le même espace mémoire que le programme
principal, ce qui le rend aussi rapide que ton programme principal.



L'avantage d'utiliser un thread ? Les ressources utilisées par ton prog
sont les même, mais lorsque le thread calcule, cela ne bloque pas ton
prog principal, et du coup, tu n'as plus de saccades (en théorie !).



VB n'est pas forcément orienté multi-threading, mais en passant par les
API, tu devrait pouvoir utiliser cette méthode pour améliorer la
rapidité de ton programme. par contre, je n'ai jamais programmé en
multi-threading sous VB, (ni même sous Windows !), je ne pourrais donc
pas t'aider dans cette tâche.

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 mars 2005 à 14:43
Là est le problème des colorations syntaxique. Je pense que le plus
rapide et de stocker en mémoire le texte au format RTF, de le manipuler
pour mettre les couleurs là où il faut, et de ne l'appliquer qu'une
fois le calcul fait, cela évite des raffraichissement pas très propre.
Et si tu veux garder un max de rapidité pour ton prog, passe par un
nouveau thread qui ne ferais alors que la coloration syntaxique, cela
devrait éviter de faire ramer ton prog lui même.

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : http://www.ProgOtoP.com/popapi/
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
23 mars 2005 à 14:46
Si mes souvenir sont bon, il y avait une src sur VBF qui en parlait.

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)

NH
0
minimarch Messages postés 31 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 février 2006
23 mars 2005 à 15:04
je stocke bien le texte RTF en memoire, et je n'applique qu'une fois le
tout fini (je ne lavais pas fait au debut et jai rapidement compris mon
erreur).



le probleme, cest que meme en faisant ca, vu que je revoi tout le texte
a chaque fois, ajouter le moindre caractere demande quelques centiemes
de secondes, c pa enorme mais ca sacade. Ceci etant dit, le probleme ne
se pose que sur les gros fichiers (mais pour linstant quelques dizaines
de lignes ca fait deja un gros fichier).



jy aie repenser, je pense que je vais essayer de trouver un moyen de ne
mettre a jour que la ligne courante. mais alors la, bonjour pour les
commentaires multilignes !!! lol



petite precision technique: qu'est ce qu'un thread ? une nouvelle fenetre ? ou module a part ?



merci pour vos reponses en tout cas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 mars 2005 à 15:04
Ben ma source de gestion du richtextbox en parle, en plus de détecter
le mot se situant sous la souris lorsque celle passe au dessus d'un
richtextbox (ou d'un textbox aussi). Mais le principe que j'utilise est
assez lent lui aussi. Le passage à un nouveau thread pour traîter ca
devrait permettre de ne pas trop ralentir le programme normalement.

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
minimarch Messages postés 31 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 12 février 2006
23 mars 2005 à 15:45
hum.... je ne connaissais point. Commencant (un peu) a connaitre VB, je
pense qu'en effet il ne doit pas etre le plus adapte. mais le sujet est
interessant, je vais aller fouiller un peu voir si je trouve des choses
la dessus.



merci bien !
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
23 mars 2005 à 15:48
Si tu veux des pistes de recherche, renseigne toi sur les fonctions de l'API Windows parlant de threads, nottament :



CreateThread

ExitThread

SetThreadPriority

SwitchToThread

TerminateThread

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
0
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
23 mars 2005 à 16:19
Pour info :

Un thread est un processus léger, résultat de la décomposition d'un processus en plusieurs entités indépendantes. Le thread est l'élement primordial lorsque l'on parle de multitâche, mais multitâche ne signifie pas multiprocessing. Un OS capable de gérer plusieurs processeurs, comme NT, 2000 ou XP peut exécuter des threads sur des processeurs différents. Un OS non capable de gérer plusieurs processeurs, comme 95 ou Me peut exécuter chaque thread en affectant cycliquement du temps CPU à chacun de ces thread.

Il est toutefois fortement déconseillé d'utiliser le multithreading en VB. Le plantage n'est jamais loin. Créer des ActiveX EXE est une façon plus adaptée de faire du multithreading en VB.

Un lien (mais en anglais) :
http://www.freevbcode.com/ShowCode.Asp?ID=1287#A%20Quick%20Review%20Of%20Multithreading

Guy
0
Rejoignez-nous