Oui, oui. ^^
Ce sont des traitements simples, quelques dizaines d'instructions par itération. Le CPU peut faire des dizaines/centaine de millions d'itérations de ce genre par seconde (et autant de points).
Oui, oui. ^^
Ce sont des traitements simples, quelques dizaines d'instructions par itération. Le CPU peut faire des dizaines/centaine de millions d'itérations de ce genre par seconde (et autant de points).
Là je lis des trucs sur les listes
J'ai réussi à en utiliser une pour charger un graph par databing() mais il faut créer une classe avec des éléments de la liste dedans, je me perds un peu la dedans (je viens du C en embarqué)
Perso un tableau ça me parle plus, c'est typé pareil, bref je ne vois pas la différence...
j'ai trouvé ça
http://msdn.microsoft.com/fr-fr/libr...=vs.90%29.aspx
mais ça ne m'aide pas, ni a comprendre, ni a choisir.
Ca va m'apporter quoi de charger mon fichier dans une list (plutôt que dans un tableau) pour disposer ensuite de mes données pour remplir le Chart ?
Merci
si j'en crois ton post ici
http://www.developpez.net/forums/d12...p/#post6649293
ce serait kif kif niveau perf
Mais List est dynamique, ce serait donc plus mieux pour la gestion de la mémoire.
on peut faire un foreach sur La list
Peut être des recherches...
Je vais me prendre par la main et tenter le coup avec les outils modernes![]()
Sinon tu peux aussi faire un tour du côté de composants payants, tels que Telerik : http://www.telerik.com/support/demos....aspx#WinForms
Il me semble qu'ils ont une démo où ils affichent un graph avec un gros jeu de données. Je ne peux pas vérifier dans l'immédiat donc à confirmer![]()
Less Is More
Pensez à utiliser les boutons
,
et les balises code
Desole pour l'absence d'accents, clavier US oblige
Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.
Bonjour.
Dans le code que j'ai donné plus tôt, j'ai utilisé une liste parce que je ne connaissais pas le nombre de données dans le fichier.
Si le nombre de donnée est fixe, on peut utiliser un tableau. Si le nombre de donnée est inconnu, une liste est pratique.
On peut aussi combiner les deux, charger avec une liste, puis remplir un tableau (dans le cas où les données ne bougent plus après le chargement).
Open Source Microsoft MediaFoundation
https://github.com/mofo7777
http://jeux.developpez.com/faq/directx/?page=dshow
Liste ou tableau c'est complètement secondaire ici : dans tous les cas on gagnera au mieux un gain de performances négligeable. Pour l'heure ce qui nous occupe c'est de faire un code propre et lisible qui soit mille fois plus rapide que l'actuel, pas un machin hyper-optimisé et trois fois plus lourd qui soit encore 1% plus rapide que ça.
La clarté et la simplicité doivent primer. D'abord parce que nous sommes encore dans le prototypage (donc pas de fioritures), ensuite parce qu'on n'optimise pas sans données qui nous disent quoi optimiser (premature optimization is the root of all evil). Enfin parce que même une fois que le code sera finalisé, sa clarté doit primer, surtout si on a atteint un stade où il n'y a plus aucun problème de performances.
Pour l'autre question, l'intérêt d'utiliser une liste c'est de ne pas avoir à relire et interpréter le fichier à chaque zoom. On garde les points une fois pour toute en mémoire et du coup il sera rapide de les relire. A mon avis si on essayait de relire le fichier à chaque fois les performances ne seraient pas au rendez-vous (avant tout parce que les opérations I/O sont très lentes mais aussi parce que la conversion d'une chaîne décimale en un nombre est à elle seule bien plus complexe qu'une seule de nos itérations).
Je suis à la limite du burnout mais ça avance ! pire que ça, je crois que j'ai vaincu !
J'ai trouvé encore plus simpe et lisible que la force brute pour sélectionner les datas à afficher dans la List générale, chargée une bonne fois pour toute au début avec le fichier CSV.
ensuite, pour détecter le zoom sur le graph et sélectionner une autre fenêtre à afficher sur le graph :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 var query = from MyClass Classe in MaList where ( Classe.myDate > Min && Classe.myDate < Max) select Classe; foreach (MyClass c in query) { chart1.Series["Series3"].Points.AddXY(c.myDate, c.myValeur1, c.myValeur2); }
-je désactive le zoom
-j'active la selection par l'utilisateur
Code : Sélectionner tout - Visualiser dans une fenêtre à part chart1.ChartAreas[0].AxisX.ScaleView.Zoomable = false;
Ensuite je déclenche l'évènement MouseCaptureChanged et je met à jour mon graph là
Code : Sélectionner tout - Visualiser dans une fenêtre à part chart1.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
chart1.ChartAreas[0].CursorX.SelectionStart et End donnent la fenêtre sélectionnée par l'utilisateur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 private void chart1_MouseCaptureChanged(object sender, EventArgs e) { MiseAJourGraph(chart1.ChartAreas[0].CursorX.SelectionStart, chart1.ChartAreas[0].CursorX.SelectionEnd); }
Ça marche très très fort avec ça, en affichant juste assez de point pour remplir l’écran...
Il me reste à recréer le zoom de toute pièce, avec les scrollbar, les retour en arrière etc. C'est super bien foutu dans le composant Chart tout ça, je vais essayer de reproduire la même chose.
Après il me restera a essayer de faire un composant perso de tout ça, histoire que ce soit plus facilement utilisable.
En tous cas un immmmmeeeense merci, autant pour m'avoir aidé à statuer sur l'impasse dans laquelle j'étais que pour la mise en oeuvre de la solution.
![]()
Partager