none
Optimisation du code avec Dynamic Data Display RRS feed

  • 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
    lundi 11 février 2013 09:18

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
    mardi 12 février 2013 15:49

Toutes les réponses

  • il n'y a aucune personne qui peut m'aider ou je suis dans la mauvaise section ou encore je n'ai pas bien expliquer ma situation.

    lundi 11 février 2013 13:33
  • ok merci je ne savais pas ou exactement mettre la question.

    Du coup, j'ai choisi le forum en fonction du code écrit.

    merci encore :)

    lundi 11 février 2013 14:57
  • 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

    mardi 12 février 2013 14:57
  • 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
    mardi 12 février 2013 15:49