Meilleur auteur de réponses
Optimisation du code avec Dynamic Data Display

Question
-
bonjour,
j’utilise "Dynamic Data Display" sur un projet wpf codé en c#, mais j'ai un petit soucie d'optimisation. En effet je remplit une 3 listes avec chacune environ 200 points. mais dès que j'arrive au 100ème point le pc commence a ramé (pc 4go de mémoire vive et 1 go de carte graphique donc normalement le pc est assez puissant). je sais que le soucie est dans mon code, mais je n'arrive pas à l'optimiser.
en gros voila mon code
private ListPointD3cs listeX = new ListPointD3cs();
private ListPointD3cs listeY = new ListPointD3cs();
private ListPointD3cs listeZ = new ListPointD3cs();
private EnumerableDataSource<Point> dsX = new EnumerableDataSource<Point>(listeX);
private EnumerableDataSource<Point> dsY = new EnumerableDataSource<Point>(listeY);
private EnumerableDataSource<Point> dsZ = new EnumerableDataSource<Point>(listeZ);for (i = 0; i < 200; i++) { listeX.Add(new Point(i,i/2)); listeY.Add(new Point(i, i+10)); listeZ.Add(new Point(i, i+20)); } var dsX = new EnumerableDataSource<Point>(listeX); dsX.SetXMapping(x => axeX.ConvertToDouble(x.X)); dsX.SetYMapping(y => y.Y); var dsY = new EnumerableDataSource<Point>(listeY); dsY.SetXMapping(x => axeX.ConvertToDouble(x.X)); dsY.SetYMapping(y => y.Y); var dsZ = new EnumerableDataSource<Point>(listeZ); dsZ.SetXMapping(x => axeX.ConvertToDouble(x.X)); dsZ.SetYMapping(y => y.Y); courbe.AddLineGraph(dsX, Colors.Blue, 2, "X"); courbe.AddLineGraph(dsY, Colors.Red, 2, "Y"); courbe.AddLineGraph(dsZ, Colors.Green, 2, "Z");
}
je crois que le soucis vien que a chaque fois je fait une nouvelle courbe même avec les ancien points. j'ai essayer de les supprimer de "listeX", "listeY" et "listeZ" avec les fonctions Remove existantes et Clear(), mais le DLL me génère une exception "FunctionNotImplimented"
est ce que quelqu'un a déjà utilisé ce DLL et a réussit a faire quelque optimisation dessus ??
merci d'avance :)
- Modifié ahmedmahdi lundi 11 février 2013 09:19
- Déplacé Aurel Bera lundi 11 février 2013 14:55 Forum
Réponses
-
je crois que j'ai trouvé une solution temporaire et un moche comme code.
je la partage avec vous.
private void timerEchantiollonnage_tick(object source, EventArgs e) { listeDesDonneeAquis = lireLesDonnees(); tracerLaCourbe(listeDesDonneeAquis); } private void tracerLaCourbe(List<Point> listeDesDonneeAquis) { if (listeX.Count > 1) { listeX = new ListPointD3cs(); listeX.Add(ancienPointX); listeY = new ListPointD3cs(); listeZ = new ListPointD3cs(); listeY.Add(ancienPointY); listeZ.Add(ancienPointZ); } ancienPointX = listeDesDonneeAquis[0]; ancienPointY = listeDesDonneeAquis[1]; ancienPointZ = listeDesDonneeAquis[2]; listeX.Add(listeDesDonneeAquis[0]); listeY.Add(listeDesDonneeAquis[1]); listeZ.Add(listeDesDonneeAquis[2]); dsX.SetXMapping(x => axeX.ConvertToDouble(x.X)); dsX.SetYMapping(y => y.Y); dsY.SetXMapping(x => axeX.ConvertToDouble(x.X)); dsY.SetYMapping(y => y.Y); dsZ.SetXMapping(x => axeX.ConvertToDouble(x.X)); dsZ.SetYMapping(y => y.Y); courbe.AddLineGraph(dsX, Colors.Blue, 2); courbe.AddLineGraph(dsY, Colors.Red, 2); courbe.AddLineGraph(dsZ, Colors.Green, 2); }
mais dans ce cas vous aurez plusieurs courbes et les légendes vont se répéter et s'empiler une a une :
il faut donc juste ajouter cette ligne :
courbe.LegendVisible = false;
et mettre les légendes avec des labels simples.bien sûr toute autre solution est bienvenue :)
- Marqué comme réponse ahmedmahdi mardi 12 février 2013 15:49
- Modifié ahmedmahdi mercredi 13 février 2013 08:16
Toutes les réponses
-
-
Bonjour
J'ai déplacé votre thread vers le forum dédié WPF.
Cordialement,
- Modifié Aurel Bera lundi 11 février 2013 15:03
-
-
excusez moi je me suis trompé de code (je vous ai donné le code de teste :( )
en faite j'utilise un Timer pour vérifier les valeur en temps réel et je doit les afficher a leurs aquisitions
voici le code
private void timerEchantiollonnage_tick(object source, EventArgs e) { listeDesDonneeAquis = lireLesDonnees(); tracerLaCourbe(listeDesDonneeAquis); } private void tracerLaCourbe(List<Point> listeDesDonneeAquis) { listeX.Add(listeDesDonneeAquis[0]); listeY.Add(listeDesDonneeAquis[1]); listeZ.Add(listeDesDonneeAquis[2]); dsX.SetXMapping(x => axeX.ConvertToDouble(x.X)); dsX.SetYMapping(y => y.Y); dsY.SetXMapping(x => axeX.ConvertToDouble(x.X)); dsY.SetYMapping(y => y.Y); dsZ.SetXMapping(x => axeX.ConvertToDouble(x.X)); dsZ.SetYMapping(y => y.Y); courbe.AddLineGraph(dsX, Colors.Blue, 2); courbe.AddLineGraph(dsY, Colors.Red, 2); courbe.AddLineGraph(dsZ, Colors.Green, 2); }
veuillez m'excusez
-
je crois que j'ai trouvé une solution temporaire et un moche comme code.
je la partage avec vous.
private void timerEchantiollonnage_tick(object source, EventArgs e) { listeDesDonneeAquis = lireLesDonnees(); tracerLaCourbe(listeDesDonneeAquis); } private void tracerLaCourbe(List<Point> listeDesDonneeAquis) { if (listeX.Count > 1) { listeX = new ListPointD3cs(); listeX.Add(ancienPointX); listeY = new ListPointD3cs(); listeZ = new ListPointD3cs(); listeY.Add(ancienPointY); listeZ.Add(ancienPointZ); } ancienPointX = listeDesDonneeAquis[0]; ancienPointY = listeDesDonneeAquis[1]; ancienPointZ = listeDesDonneeAquis[2]; listeX.Add(listeDesDonneeAquis[0]); listeY.Add(listeDesDonneeAquis[1]); listeZ.Add(listeDesDonneeAquis[2]); dsX.SetXMapping(x => axeX.ConvertToDouble(x.X)); dsX.SetYMapping(y => y.Y); dsY.SetXMapping(x => axeX.ConvertToDouble(x.X)); dsY.SetYMapping(y => y.Y); dsZ.SetXMapping(x => axeX.ConvertToDouble(x.X)); dsZ.SetYMapping(y => y.Y); courbe.AddLineGraph(dsX, Colors.Blue, 2); courbe.AddLineGraph(dsY, Colors.Red, 2); courbe.AddLineGraph(dsZ, Colors.Green, 2); }
mais dans ce cas vous aurez plusieurs courbes et les légendes vont se répéter et s'empiler une a une :
il faut donc juste ajouter cette ligne :
courbe.LegendVisible = false;
et mettre les légendes avec des labels simples.bien sûr toute autre solution est bienvenue :)
- Marqué comme réponse ahmedmahdi mardi 12 février 2013 15:49
- Modifié ahmedmahdi mercredi 13 février 2013 08:16