IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Afficher sur un graph zoomable une grande quantité de données


Sujet :

C#

  1. #21
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    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).

  2. #22
    Membre extrêmement actif Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 037
    Par défaut
    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

  3. #23
    Membre extrêmement actif Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 037
    Par défaut
    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

  4. #24
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    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.

  5. #25
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour.

    Citation Envoyé par petitours Voir le message

    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
    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).

  6. #26
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    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).

  7. #27
    Membre extrêmement actif Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    2 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 2 037
    Par défaut
    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.
    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);
                }
    ensuite, pour détecter le zoom sur le graph et sélectionner une autre fenêtre à afficher sur le graph :
    -je désactive le zoom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chart1.ChartAreas[0].AxisX.ScaleView.Zoomable = false;
    -j'active la selection par l'utilisateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chart1.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
    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
    1
    2
    3
    4
    private void chart1_MouseCaptureChanged(object sender, EventArgs e)
            {
             MiseAJourGraph(chart1.ChartAreas[0].CursorX.SelectionStart, chart1.ChartAreas[0].CursorX.SelectionEnd);
            }
    chart1.ChartAreas[0].CursorX.SelectionStart et End donnent la fenêtre sélectionnée par l'utilisateur.

    Ç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.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Envoyer une grande quantité de données dans un xml via http
    Par qdaemon_fr dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 03/03/2009, 09h51
  2. Manipulation d'une grande quantité de données
    Par sebastyen dans le forum Langage
    Réponses: 1
    Dernier message: 10/11/2008, 15h54
  3. Réponses: 11
    Dernier message: 23/09/2008, 15h39
  4. Une grande quantité de données sur Oracle 8i?
    Par bliml dans le forum Oracle
    Réponses: 13
    Dernier message: 01/03/2007, 11h45
  5. Réponses: 1
    Dernier message: 10/01/2007, 15h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo