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 :

Gestion de la mémoire douteux dans un thread


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 34
    Par défaut Gestion de la mémoire douteux dans un thread
    Bonjour,

    Je démarre un thread qui se termine seulement a la fin du programme dont le but est de checker si un périphérique est connecté via usb -> HID.

    J'ai tenté de 2 manières:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
              while (true)
                {
     
                    if (HidDevices.IsConnected("\\\\?\\hid#vid_1b91&pid_000a#6&1d66a16e&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}"))
                    {
                       ctrl.getIhm().Invoke(ctrl.getIhm().UploadDelegate, new object[] { true });
                       ctrl.getIhm().Invoke(ctrl.getIhm().EtatBarDelegate, new object[] { "Ewoo connected" });
                    }
                    else {
                      ctrl.getIhm().Invoke(ctrl.getIhm().UploadDelegate, new object[] { false });
                      ctrl.getIhm().Invoke(ctrl.getIhm().EtatBarDelegate, new object[] { "Ewoo no connected" });
                    }                                        
                    Thread.Sleep(800);
                }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
                while (true)
                {
                    HidDevices[] devices = HidDevices.Enumerate(0x1B91, 0x000A);
                    if (devices.Length > 0)
                    {
                       ctrl.getIhm().Invoke(ctrl.getIhm().UploadDelegate, new object[] { true });
                       ctrl.getIhm().Invoke(ctrl.getIhm().EtatBarDelegate, new object[] { "Ewoo connected" });
                    }
                    else {
                      ctrl.getIhm().Invoke(ctrl.getIhm().UploadDelegate, new object[] { false });
                      ctrl.getIhm().Invoke(ctrl.getIhm().EtatBarDelegate, new object[] { "Ewoo no connected" });
                    }                                        
                    Thread.Sleep(800);
                }
    Les 2 fonctionnes cependant le programme ne fait qu'augmenter en RAM. Il est possible qu'il y ait un pb avec la libraire que j'utilise: http://labs.mike-obrien.net/view.asp...tid=hidlibrary

    Est ce que qqu peut m'aider ?

  2. #2
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Il vient d'où ton ctrl ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 34
    Par défaut
    J'ai créé une petite structure MVC. C'est pas très important, j'ai laissé la ligne pour montrer qu'il se passe un peu qqc.
    Ce qui pose problème c'est la l'accès au périphérique USB. Mais je ne vois pas bien comment faire autrement pour checker en permanence si'il est connecté

  4. #4
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Dans ce cas, je n'ai observé aucun problème de mémoire car j'ai testé ton code sans la partie des ctrl et je ne vois rien aucune perte de mémoire.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 34
    Par défaut
    Si j'enlève les méthode invoke j'ai toujours le meme problème. Par contre un truc très étrange:

    si je test l'application sur mon PC j'arrive a 4kb environ tout les 3 ou 4 sec et si je fais le meme test sur un autre pc j'obitent des + 2, 3 Mo par seconde

    Je sais pas, si tu veux jeter un coup d'oeil a l'application je peux te l'envoyer. Elle n'est pas très grande.

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2005
    Messages : 241
    Par défaut
    Bonjour,
    je ne suis pas développeur C#, mais la question qui m'intrigue c'est:
    Si tu es tenu d'utiliser des tableaux "constants" dans tes "Invoke", pourquoi ne pas les déclarer une bonne fois pour toute? ça t'évite des allocations qui pourrait être non contrôlées, et à la limite pas de coût de construction toutes les 800 millisecondes.
    Parce que selon moi, à chaque tour de boucle, le new ... va allouer de la mémoire, même si c'est pas grand chose.

    S. Desbois

Discussions similaires

  1. [WD10] Gestion d'un fenêtre dans un thread différent
    Par Louis Griffont dans le forum WinDev
    Réponses: 23
    Dernier message: 21/06/2010, 09h47
  2. Gestion des évènements dans un thread
    Par kashikai dans le forum SDL
    Réponses: 0
    Dernier message: 25/05/2009, 14h32
  3. Gestion d'un IdIcmpClient dans un thread
    Par yamino dans le forum Delphi
    Réponses: 3
    Dernier message: 27/12/2006, 13h21
  4. Affichage dans un thread // gestion du clavier!
    Par phraides dans le forum SDL
    Réponses: 5
    Dernier message: 08/07/2006, 12h14
  5. Gestion des message windows dans les threads
    Par billyboy dans le forum Windows
    Réponses: 5
    Dernier message: 06/10/2003, 17h25

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