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 :

Augmentation de mémoire avec WPF Chart [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Par défaut Augmentation de mémoire avec WPF Chart
    Bonjour,

    En cherchant à créer des graphiques ( plus particulièrement des courbes ) en WPF, je me suis tourné vers Chart que l'on peut trouver dans le WPF Toolkit.
    Ma page en WPF devait en effet afficher plusieurs graphiques contenant la valeur d'un paramètre sur la dernière heure. Les valeurs de la dernière heure sont stockées dans un dictionnaire de données avec un DateTime en clé et un float en valeur.

    Mon problème : A chaque graphe.refresh() mon processus prends de la mémoire et ne la libère jamais. Résultat : même en enlevant des valeurs autant que j'en rajoute dans mon dico, mon processus fait 1Go en 30 minutes et finit par faire une OutOfMemory.

    Je cherche donc à gérer ces problèmes de mémoire ou trouver un meilleur moyen d'ajouter des graphiques dans mon wpf.

    Merci de votre aide !

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Fais voir la partie du code où tu rafraichis le graphe
    Et essaie d'utiliser un profileur comme ANTS Memory Profiler (tu peux l'essayer gratuitement pendant 2 semaines) pour voir s'il y a des références qui ne sont pas libérées

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Par défaut
    Le rafraichissement du graphe est une méthode associée à la courbe de mon graphe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((LineSeries)Graphique.Series[0]).Refresh();
    Je vais essayer le profileur pour voir ce que ça donne.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Jilano Voir le message
    Le rafraichissement du graphe est une méthode associée à la courbe de mon graphe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((LineSeries)Graphique.Series[0]).Refresh();
    Et tu ne fais rien de plus ? Tu ne modifies pas les données sources du graphe ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Par défaut
    En réalité, le thread principal de mon application ajoute les valeurs au dictionnaire de données associé au graphe.
    Un autre thread exécuté toutes les X secondes enlève du dico les données qui ont plus d'une heure et appelle la méthode refresh du graphe.
    Le dictionnaire est associé au graphe lors de l'initialisation du programme avec :
    ((LineSeries)Graphique.Series[0]).ItemsSource = values; values étant : private Dictionary<DateTime,float> values;

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    OK, et tu es sûr que c'est bien l'appel à Refresh qui cause l'augmentation de la consommation de mémoire ?

    Idéalement, il vaudrait mieux utiliser une ObservableCollection plutôt qu'un dictionnaire ; comme ça tu n'aurais pas besoin de faire un Refresh, le graphe se mettrait à jour tout seul quand tu ajouterais/supprimerais des éléments de la collection. Essaie de mettre une ObservableCollection<KeyValuePair<DateTime, float>> à la place du dictionnaire

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MFC] Augmentation en mémoire
    Par pitch21 dans le forum MFC
    Réponses: 21
    Dernier message: 20/07/2004, 13h01
  2. Problème de mémoire avec BDE
    Par Machuet dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/07/2004, 10h11
  3. Problémes mémoire avec le bde sur des bases paradox
    Par Keke des Iles dans le forum Bases de données
    Réponses: 2
    Dernier message: 27/05/2004, 16h55
  4. Problème mémoire avec une dll par chargement dynamique
    Par widze19 dans le forum C++Builder
    Réponses: 6
    Dernier message: 15/12/2003, 13h20
  5. Comment bien gerer la mémoire avec les TStringList?
    Par david_chardonnet dans le forum Langage
    Réponses: 5
    Dernier message: 18/06/2003, 09h57

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