Luciol44
Messages postés28Date d'inscriptiondimanche 16 octobre 2005StatutMembreDernière intervention28 mars 2010
-
26 mars 2010 à 11:53
Luciol44
Messages postés28Date d'inscriptiondimanche 16 octobre 2005StatutMembreDernière intervention28 mars 2010
-
2 avril 2010 à 00:15
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Luciol44
Messages postés28Date d'inscriptiondimanche 16 octobre 2005StatutMembreDernière intervention28 mars 2010 28 mars 2010 à 18:25
Merci ADN56, je viend de voir ca je ne contrend pas non plus cette dent de scie. Si non pour le VBarGraphe (VingtBarGraphe) je vais en faire un modulable en nb de bar. Mais le code n'est pas trop compliqué a rectifier pour passer de 20 a 10. Il faut redim les tableaux, redim la bitmap et redim les boucle k. Je vais te faire ca dans la soirée.
Merci a++
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 28 mars 2010 à 18:15
avec :
Private Sub BarGraphe_VisibleChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.VisibleChanged
'quand il est pas visible on coupe les timers
Timer1.Enabled = Me.Visible
End Sub
ou sans d'ailleur (fonction supprimée)
je tombe à 1% de cpu, mais à chaque fois que la form est cachée le fichier d'échange monte !
je bosse dessus....
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 28 mars 2010 à 18:04
je viens de tester ta nouvelle source :
8% utilisation maxi de la cpu, en revanche le fichier d'échange monte à plus de 300mo (de 700 à 1Go chez moi) lorsque la form est caché et ce en dent de scie.
étrange....
Pour finir revois ta form principal car chez moi elle fonctionne, mais avec un plantage sur le designer.
une fois compilé c'est OK
amélioration pour le Vbar :
redimensionnement complet, pas seulement la hauteur
nombre de colonne réglable, ici 20 mais si j'ai que 10 bandes de fréquences ?
Bon boulot, continu.
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 28 mars 2010 à 17:48
Et bien tu peux utiliser la sub paint appellé par le invalidate()
comme le dis bigboss et raccourcir le code
ex :
'quand il est pas visible on coupe les timers
245. If Me.Visible = False Then
246. Timer1.Enabled = False
247. End If
devient :
'quand il est pas visible on coupe les timers
245. If not Me.Visible then Timer1.Enabled = False
ou encore mieux
'quand il est pas visible on coupe les timers
timer1.enabled = me.visible
++
Luciol44
Messages postés28Date d'inscriptiondimanche 16 octobre 2005StatutMembreDernière intervention28 mars 2010 28 mars 2010 à 12:50
Merci ADN56, la modification a ete apportée. Dans les proprietes on a le choix entre un panel de couleur ou de les rentrer a la main (R;V;B).
Voila, et si d'autre petite chose peuvent etre amelioré, n'esite pas.
Merci a tous.
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 28 mars 2010 à 12:26
T'inquiéte, bigboss à toujours beaucoup de mal à s'exprimer sans être irritant pour le moins. Mais il à raison pour les couleurs c'est pour cela que je t'ai filer l'idée de voir comment je les utilise dans mes sources. C'est tout de même vachement plus sympa d'avoir le choix de la couleur via le colorpicker.
Ex :
Private choix_Couleur As Color
Dim Colorbox As New ColorDialog
If Colorbox.ShowDialog = Windows.Forms.DialogResult.OK Then
choix_Couleur= Colorbox.Color
End If
Pour retrouver une couleur depuis l'ARGB :
Dim r, v, b As Byte ' rouge,vert,bleu de 0 à 255
choix_Couleur = Color.FromArgb(255, r, v, b)
'le premier 255 est l'opacité.
@++
Luciol44
Messages postés28Date d'inscriptiondimanche 16 octobre 2005StatutMembreDernière intervention28 mars 2010 28 mars 2010 à 10:47
Non desolé Renfield, je n'ai pas testé ton idéé. Comme je te l'ai deja dit, il y a une memoire des pique comme dans un vrai vumetre, ce qui obligerai a faire plusieur decoupage de l'image pour afficher la partie eteinte puis le pique puis une autre partie eteinte et enfin les bar allumées. En plus comme j'ai trouvé autre une solution qui prend beaucoup moin de resource (Drawline x 4 remplacé par un seul FillRectangle), je crois que je vais resté sur cette idée. Si non pour les couleur je t'avourai que j'ai encore beaucoup de mal avec les variable couleur de VB.Net. Comme j'ai pas trouvé d'exemple d'utilisation (j'ai un peu cherché mais j'avais d'autre chose a faire dans mon projet), mais si tu as un tuto qui explique comment fonctionne les Pen, Brush, Color et autre, je le mettrai dans mon code. Je voulai que les couleurs soient vraiment libre et non pas avoir une liste de coleur predeffini.
Merci a tous.
PS: ce projet s'inscrit dans un lecteur audio basée autour de la dll Fmodex, pour une troupe de cabaret amateur.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 28 mars 2010 à 06:31
"-Pour les couleur, je c qu'il existe d'autre facon de faire, j'ai chisi celle-la et c mon choix. A toi de modifier le code pour tes besoin."
sympa de te faire des critiques constructives... tu tapes au clavier avec tes coudes, et en plus t'es humble...
royal ^^
ne dis pas des choses comme "j'ai choisi celle la et c'est mon choix"
entre avoir un panel permettant de choisir une couleur visuellement, et taper la valeur nunmérique correspondante, y'a pas photo...
après, si la raison est qu'il est plus facile d'enregistrer un simple entier (base de données, fichier, etc) pour le restaurer depuis le code, RIEN ne t'en empèche quand bien même tu as proposé une propriété typée As Color !
As tu testé mon idée d'optimisation ? (ne pas tout redessiner)
Luciol44
Messages postés28Date d'inscriptiondimanche 16 octobre 2005StatutMembreDernière intervention28 mars 2010 28 mars 2010 à 00:42
Juste pour info Bigboss9, au cas ou tu l'aurai pas vu, le timer sert a faire une derivée numerique. Juste pour que tu comprenne un peu mieux le code. Suprime le timer et le bargraphe marche quand meme mais pas la memoire du max.
Merci a+.
Luciol44
Messages postés28Date d'inscriptiondimanche 16 octobre 2005StatutMembreDernière intervention28 mars 2010 28 mars 2010 à 00:34
Donc bigboss9,
-Pour les couleur, je c qu'il existe d'autre facon de faire, j'ai chisi celle-la et c mon choix. A toi de modifier le code pour tes besoin.
-Il n'y a pas de double buffer dans mon control. Alors pressise a qui tu parle pour ca
-Et pour finir, le timer n'est pas la pour faire jolie ou pour actualiser l'affichage mais juste pour faire l'effet de memoire du max. En plus, si tu regarde bien, il est coupé quand le bargraphe retombe a zero.
-Enfin, ce n'est pas un pauvre division de plus ou de moin qui bouffe des ressources ou de la ram comparé au traitement d'un bitmap stoquée dans la ram (temps d'une division ridicule).
Je ne sais pas depuis cb de temps tu prog en VB.Net, moi j'ai commencé il y a 3 mois et je trouve que tes critique sur un code que tu n'as pas tout a fait compris ne sont pas tres constructive.
merci quand meme.
Luciol44
Messages postés28Date d'inscriptiondimanche 16 octobre 2005StatutMembreDernière intervention28 mars 2010 28 mars 2010 à 00:13
ADN56 a tu retesté la nouvelle source pour voir si elle pompai moin sur ta config? sur la mien (dualcore avec 4Go ram) elle n'est presque plus detectable, juste de temps en temps 3% (contre 40% avant). Tiend moi au courant merci.
ps: quand j'aurai fini mon autre projet (control utilisateur pour la dll Fmodex) je ferai le bargraphe modulable en nb de bar.
cs_bigboss9
Messages postés162Date d'inscriptionjeudi 22 janvier 2004StatutMembreDernière intervention20 juillet 2013 28 mars 2010 à 00:01
'Vindiou le bordel la d'dans ...
Je vais essayer de m'expliquer clairement et en procédant dans l'ordre.
- Une couleur un Integer->Conversion vers du RGB = des ressources utilisées pour RIEN.
Dim mColor as Color.FromARGB(Alpha,Red,Green,Blue)
- L'activation du DoubleBuffer NE SERT A RIEN dans la mesure ou tu essayes de faire un pseudo double buffer "maison", sauf que c'est raté. L'activation de la propriété DoubleBuffered d'un control ne fonctionne QUE LORSQUE LES INSTRUCTIONS SONT ECRITES DANS LA SUB PAINT() du control. C'est ton objet Bitmap qui prend le plus de ressources en RAM.
- Pour finir, l'erreur la plus absurde est d'avoir mis ton stupide Timer dans ton control. Tu as un control VueMètre, c'est bien. La gestion de son affichage, de l'actualisation des données ne se fait pas à l'intérieur de celui-ci mais par le programme qui l'exploite. Ainsi, pour économiser les ressources, on actualise uniquement si les données changent ... et non à interval régulier.
- Ne fais pas d'opérations de calcul inutiles. Les divisions sont TRES couteuses. Le .Net n'est pas réputé pour sa rapidité d'execution. Il faut optimiser tes calculs, en faire le moins possible. La solution ? Lors de l'initialisation de ton control et à son redimensionnement, calcule toutes les possibilités d'affichage de tes valeurs. Ensuite, il suffit de récupérer les valeurs calculées une fois pour toute et non à chaque itération du timer.
Sur ce, bon courage.
5/10 pour l'effort.
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 27 mars 2010 à 16:58
regarde une de mes sources sur les bargraph pour y piocher des idées sur les couleurs et autres dégradés
Luciol44
Messages postés28Date d'inscriptiondimanche 16 octobre 2005StatutMembreDernière intervention28 mars 2010 27 mars 2010 à 14:45
J'ai trouvé une solution, plutot que d'utiliser la fonction "DrawLine" 4 fois pour faire un rectangle, j'ai utilisé "FillRectangle". Parcontre ce n'est plus un Pen qu'il faut utiliser mais un SolidBrush pour la couleur. En meme temps j'ai aussi repensé l'algo de base pour le simplifier. Ca le rend plus lisible mais pas plus preformant.
Je vous mets ca en ligne des que j'ai fini de faire la source (j'y integre aussi un vumetre de 20 bar)
Merci a tous.
Luciol44
Messages postés28Date d'inscriptiondimanche 16 octobre 2005StatutMembreDernière intervention28 mars 2010 27 mars 2010 à 11:37
Merci pour vos commentaire,
Pour Renfield:
je ne peu pas utiliser les deux image comme tu le decri, puisqu'il y a l'effet de memoire du pique du bargraphe. mais utiliser un image du bargraphe vide et n'allumer que les bars voulu ca doit etre fesable. je vais regarder dans cette direction pour voir ca fonctionne.
Pour ADN56:
Alors j'ai utilisé le system de coulor integer parce que je ne savai pas trop comment faire. Je viend du monde VB6 et ca ne fait que 3 mois que je suis passé en VB.Net pour reté compatible avec les nouvelles platforme (vista et seven). donc si vous voyez des petits probleme de ce genre n'esitez pas a me le dir.
Si non, c'est quoi le double buffer que tu as ajouté sur la form? Je ne vois pas se que c'est.
Autrement, n'y a t il pas une solution pour dir qu'une parti du code va etre traité par le gpu plutot que par le cpu? Je dis ca comme ca (sans savoir si c'est possible) mais ca serai peu etre une solution.
Pour info: L'apli final doit tourner sur du monocore avec 512 ram
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 26 mars 2010 à 17:06
pour info (message sur le forum) je monte à 10% de cpu pour 6 VU sur quadcore avec 1Go ram sous Xp.
ps : j'ai ajouter le double buffer sur la form qui recois tes controls ;)
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 26 mars 2010 à 17:00
Sympa comme effet, mais je ne pige pas pourquoi tu n'utilises pas les couleurs en color(arvb) plutot que tes integers défini en héxa ! c'est vraiment moche dans la propriété du control, en plus tu te prive du choix de la couleur par la colordialogbox !
De plus passer par une picture impose des ressource, pourquoi ne pas dessiner directement sur ton control ?
@++ pour la suite car control vraiment bien foutu niveau visuel.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 26 mars 2010 à 14:39
possible d'avoir deux images.
- une complete
- une vide
et de les garder en mémoire (les recréer si tu changes les couleurs).
pour afficher telle ou telle valeur,
10, par exemple
tu affiche la partie du haut de l'image vide qui va de 11 à 28
et tu affiche la partie du bas de l'image complète.
ainsi, tu ne redessine pas tout, ca deviendra plus rapide et moins gourmand.
Luciol44
Messages postés28Date d'inscriptiondimanche 16 octobre 2005StatutMembreDernière intervention28 mars 2010 26 mars 2010 à 11:53
2 avril 2010 à 00:15
http://www.vbfrance.com/codes/CONTROL-UTILISER-PLUS-FACILEMENT-FMODEX-DLL_51542.aspx
28 mars 2010 à 19:29
http://www.vbfrance.com/codes/AMELIORATION-VU-METRE-LUCIOL44_51519.aspx
@++
28 mars 2010 à 18:25
Merci a++
28 mars 2010 à 18:15
Private Sub BarGraphe_VisibleChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.VisibleChanged
'quand il est pas visible on coupe les timers
Timer1.Enabled = Me.Visible
End Sub
ou sans d'ailleur (fonction supprimée)
je tombe à 1% de cpu, mais à chaque fois que la form est cachée le fichier d'échange monte !
je bosse dessus....
28 mars 2010 à 18:04
8% utilisation maxi de la cpu, en revanche le fichier d'échange monte à plus de 300mo (de 700 à 1Go chez moi) lorsque la form est caché et ce en dent de scie.
étrange....
Pour finir revois ta form principal car chez moi elle fonctionne, mais avec un plantage sur le designer.
une fois compilé c'est OK
amélioration pour le Vbar :
redimensionnement complet, pas seulement la hauteur
nombre de colonne réglable, ici 20 mais si j'ai que 10 bandes de fréquences ?
Bon boulot, continu.
28 mars 2010 à 17:48
comme le dis bigboss et raccourcir le code
ex :
'quand il est pas visible on coupe les timers
245. If Me.Visible = False Then
246. Timer1.Enabled = False
247. End If
devient :
'quand il est pas visible on coupe les timers
245. If not Me.Visible then Timer1.Enabled = False
ou encore mieux
'quand il est pas visible on coupe les timers
timer1.enabled = me.visible
++
28 mars 2010 à 12:50
Voila, et si d'autre petite chose peuvent etre amelioré, n'esite pas.
Merci a tous.
28 mars 2010 à 12:26
Ex :
Private choix_Couleur As Color
Dim Colorbox As New ColorDialog
If Colorbox.ShowDialog = Windows.Forms.DialogResult.OK Then
choix_Couleur= Colorbox.Color
End If
Pour retrouver une couleur depuis l'ARGB :
Dim r, v, b As Byte ' rouge,vert,bleu de 0 à 255
choix_Couleur = Color.FromArgb(255, r, v, b)
'le premier 255 est l'opacité.
@++
28 mars 2010 à 10:47
Merci a tous.
PS: ce projet s'inscrit dans un lecteur audio basée autour de la dll Fmodex, pour une troupe de cabaret amateur.
28 mars 2010 à 06:31
sympa de te faire des critiques constructives... tu tapes au clavier avec tes coudes, et en plus t'es humble...
royal ^^
ne dis pas des choses comme "j'ai choisi celle la et c'est mon choix"
entre avoir un panel permettant de choisir une couleur visuellement, et taper la valeur nunmérique correspondante, y'a pas photo...
après, si la raison est qu'il est plus facile d'enregistrer un simple entier (base de données, fichier, etc) pour le restaurer depuis le code, RIEN ne t'en empèche quand bien même tu as proposé une propriété typée As Color !
As tu testé mon idée d'optimisation ? (ne pas tout redessiner)
28 mars 2010 à 00:42
Merci a+.
28 mars 2010 à 00:34
-Pour les couleur, je c qu'il existe d'autre facon de faire, j'ai chisi celle-la et c mon choix. A toi de modifier le code pour tes besoin.
-Il n'y a pas de double buffer dans mon control. Alors pressise a qui tu parle pour ca
-Et pour finir, le timer n'est pas la pour faire jolie ou pour actualiser l'affichage mais juste pour faire l'effet de memoire du max. En plus, si tu regarde bien, il est coupé quand le bargraphe retombe a zero.
-Enfin, ce n'est pas un pauvre division de plus ou de moin qui bouffe des ressources ou de la ram comparé au traitement d'un bitmap stoquée dans la ram (temps d'une division ridicule).
Je ne sais pas depuis cb de temps tu prog en VB.Net, moi j'ai commencé il y a 3 mois et je trouve que tes critique sur un code que tu n'as pas tout a fait compris ne sont pas tres constructive.
merci quand meme.
28 mars 2010 à 00:13
ps: quand j'aurai fini mon autre projet (control utilisateur pour la dll Fmodex) je ferai le bargraphe modulable en nb de bar.
28 mars 2010 à 00:01
Je vais essayer de m'expliquer clairement et en procédant dans l'ordre.
- Une couleur un Integer->Conversion vers du RGB = des ressources utilisées pour RIEN.
Dim mColor as Color.FromARGB(Alpha,Red,Green,Blue)
- L'activation du DoubleBuffer NE SERT A RIEN dans la mesure ou tu essayes de faire un pseudo double buffer "maison", sauf que c'est raté. L'activation de la propriété DoubleBuffered d'un control ne fonctionne QUE LORSQUE LES INSTRUCTIONS SONT ECRITES DANS LA SUB PAINT() du control. C'est ton objet Bitmap qui prend le plus de ressources en RAM.
- Pour finir, l'erreur la plus absurde est d'avoir mis ton stupide Timer dans ton control. Tu as un control VueMètre, c'est bien. La gestion de son affichage, de l'actualisation des données ne se fait pas à l'intérieur de celui-ci mais par le programme qui l'exploite. Ainsi, pour économiser les ressources, on actualise uniquement si les données changent ... et non à interval régulier.
- Ne fais pas d'opérations de calcul inutiles. Les divisions sont TRES couteuses. Le .Net n'est pas réputé pour sa rapidité d'execution. Il faut optimiser tes calculs, en faire le moins possible. La solution ? Lors de l'initialisation de ton control et à son redimensionnement, calcule toutes les possibilités d'affichage de tes valeurs. Ensuite, il suffit de récupérer les valeurs calculées une fois pour toute et non à chaque itération du timer.
Sur ce, bon courage.
5/10 pour l'effort.
27 mars 2010 à 16:58
27 mars 2010 à 14:45
Je vous mets ca en ligne des que j'ai fini de faire la source (j'y integre aussi un vumetre de 20 bar)
Merci a tous.
27 mars 2010 à 11:37
Pour Renfield:
je ne peu pas utiliser les deux image comme tu le decri, puisqu'il y a l'effet de memoire du pique du bargraphe. mais utiliser un image du bargraphe vide et n'allumer que les bars voulu ca doit etre fesable. je vais regarder dans cette direction pour voir ca fonctionne.
Pour ADN56:
Alors j'ai utilisé le system de coulor integer parce que je ne savai pas trop comment faire. Je viend du monde VB6 et ca ne fait que 3 mois que je suis passé en VB.Net pour reté compatible avec les nouvelles platforme (vista et seven). donc si vous voyez des petits probleme de ce genre n'esitez pas a me le dir.
Si non, c'est quoi le double buffer que tu as ajouté sur la form? Je ne vois pas se que c'est.
Autrement, n'y a t il pas une solution pour dir qu'une parti du code va etre traité par le gpu plutot que par le cpu? Je dis ca comme ca (sans savoir si c'est possible) mais ca serai peu etre une solution.
Pour info: L'apli final doit tourner sur du monocore avec 512 ram
26 mars 2010 à 17:06
ps : j'ai ajouter le double buffer sur la form qui recois tes controls ;)
26 mars 2010 à 17:00
De plus passer par une picture impose des ressource, pourquoi ne pas dessiner directement sur ton control ?
@++ pour la suite car control vraiment bien foutu niveau visuel.
26 mars 2010 à 14:39
- une complete
- une vide
et de les garder en mémoire (les recréer si tu changes les couleurs).
pour afficher telle ou telle valeur,
10, par exemple
tu affiche la partie du haut de l'image vide qui va de 11 à 28
et tu affiche la partie du bas de l'image complète.
ainsi, tu ne redessine pas tout, ca deviendra plus rapide et moins gourmand.
26 mars 2010 à 11:53