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

Dotnet Discussion :

[C# FUITE MEMOIRE]Exporter les données du processus, mémoire, UC etc..


Sujet :

Dotnet

  1. #1
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    927
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 927
    Points : 312
    Points
    312
    Par défaut [C# FUITE MEMOIRE]Exporter les données du processus, mémoire, UC etc..
    Bonjour à tous,



    Est-ce qu'il est possible en C# (WPF) d'exporter les données correspondant à notre processus? L'utilisation de la mémoire, du processeur etc.


    Contexte:

    J'ai un logiciel qui tourne sur un PC Windows 10 sensé être un i5 de 11 génération, 8 giga de mémoire, un SSD de 256g, --> minimum.
    Il n'y a que notre logiciel qui est "sensé" tourner sur ce PC, mais il est surement accompagner pas les antivirus et consorts de sécurité.

    L'utilisateur nous indique que notre logiciel sature le PC qu'il le rend instable jusqu'à le faire planter en 3 ou 4 jours.


    Contenu du logiciel:
    C'est quelque chose de vraiment basique, avec 3 timers, une Observable collection contenant des objets avec une 10ene de variable texte et Integer., il y a au grand maximum une 30éne de lignes dans cette collection.
    Pour la vue un a un label, une listview qui affiche la collection, et un bouton pour aller dans la partie configuration. Il n'y a pas de multithread à par les évènement des timers et l'évènement d'entrée des données sur le bluetooth.

    On ne réinitialise pas la collection elle ne fait qu'ajouté des appareils de mesure et les données associer à ces appareils.

    La seul données que je n'ai pas c'est l'utilisation du bluetooth. Les appareils communique en bluetooth 5.2 à intervalle régulier et l'on capte donc ces données, pour ensuite les afficher. Si l'appareil est déjà présent dans la collection ont écrase les données existantes il n'y a pas d'accumulation.

    Par contre le Bluetooth m'inquiète, car il y a une 30ene d'appareils qui se connecte par intermittence, est-ce que ce n'est pas cela qui provoquerait une fuite mémoire quelques part.


    Ce qui est utilisé pour le Bluetooth c'est (J'ai pas développé cette partie):

    using Windows.Devices.Bluetooth.Advertisement;
    using Windows.Storage.Streams;

    J'aimerais donc pouvoir capter et stocker l'utilisation de notre processus, pour voir ce qu'il se passe.

    Bien-sûr en usine, je ne voie absolument rien. Même en mode debugge rien ne bouge, alors certes je n'ai pas 30 appareils.

    Merci de votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 004
    Points : 5 423
    Points
    5 423
    Par défaut
    Évidemment, c'est toujours plus chiant en prod !

    Peut-être que cet article pourra t'aider :
    https://timdeschryver.dev/blog/findi...#key-takeaways

  3. #3
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 146
    Points : 7 388
    Points
    7 388
    Billets dans le blog
    1
    Par défaut
    Vu que vous travaillez visiblement avec des librairies non managées (communication bluetooth et streams de données) pensez bien à explicitement détruire les objets lorsque vous ne les utilisez plus, notamment en utilisant le Dispose :

    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    using (MaClasseNonManagee monObjet = new())
    {
         monObjet.FaitDesTrucs();
    }

    => A la sortie du bloc using la méthode Dispose est appelée implicitement, ce qui pourrait bien résoudre votre problème de "fuite mémoire".

    Sans exemple de code potentiellement problématique, difficile de vous en dire plus...

    Peut-être qu'une machine de DEV avec le programme qui tourne en debug depuis un Visual Studio quelques heures dans l'environnement du client pourrait aider à identifier des fonctionnements non prévus et identifier plus facilement quelle partie du code pose problème...
    On ne jouit bien que de ce qu’on partage.

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 150
    Points : 25 066
    Points
    25 066
    Par défaut
    .net profiler (ou d'autres profiler, il y en a intégré à VS depuis qq années aussi, je ne sais pas ce qu'il vaut)
    ca permet de faire une photo de la ram, attendre qq minutes et refaire une photo pour comparer le type d'instance qu'il y a en ram en plus, ca donne souvent un indice

    vérifier aussi que l'exe livré n'est pas compilé en debug, sinon c'est normal que ca fuite
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    927
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 927
    Points : 312
    Points
    312
    Par défaut
    Bonjour à tous,


    Je viens de constater un potentiel problème. Je ne l'avais pas vu avant...

    Mon logiciel tourne en mode débug dans l'environnement de DEV Visual Studio 2022, et il y a l'outils de diagnostic présent. Ce dernier s'arrête après environ 5 minutes avec l'indication:


    Nom : Outils de diag.png
Affichages : 206
Taille : 40,4 Ko

    L'outils c'est donc arrêté, mais le logiciel continue parfaitement à fonctionner, je ne voie rien de spécial dans le moniteur de ressources de Windows.

    De quelle ressource il parle du coup sur cette capture?

    Pour information les PC en fonctionnement sont neuf, avec un i5 et 8Go de mémoire.

    J'ai testé avec une VM, 2 giga un seul proc et bridé a 40% et certes c'est très lent, mais cela fonctionne.

  6. #6
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    927
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 927
    Points : 312
    Points
    312
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    .net profiler (ou d'autres profiler, il y en a intégré à VS depuis qq années aussi, je ne sais pas ce qu'il vaut)
    ca permet de faire une photo de la ram, attendre qq minutes et refaire une photo pour comparer le type d'instance qu'il y a en ram en plus, ca donne souvent un indice

    vérifier aussi que l'exe livré n'est pas compilé en debug, sinon c'est normal que ca fuite
    Désolé Pol63,

    Je vous avais répondu, mais je n'ai pas du envoyer le message.

    Effectivement je fourni l'exe en mode Release et non Debug, c'était le cas avant mon arrivé dans la boite, tous les exe étaient en debug .

    J'ai voulus me servir de l'outil de Diag, mais comme vous avez pu le constater au dessus il frise à environ 5 minutes, même si je ne fait pas d'instantané.

Discussions similaires

  1. Exporter les données d'une flexgrid vers Excel
    Par ecarbill dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/08/2006, 19h06
  2. [MySQL] Exporter les données d'une table en PHP
    Par caro_tpl dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 08/08/2006, 12h25
  3. exporter les données d'une DB dans un doc. pdf
    Par gagalive dans le forum API standards et tierces
    Réponses: 35
    Dernier message: 15/07/2006, 14h22
  4. [Excel] Exporter les données de la DB vers un fichier
    Par flydragon dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 02/05/2006, 18h26
  5. Est-il possible d'exporter les données?
    Par frutix dans le forum Débuter
    Réponses: 8
    Dernier message: 21/06/2004, 11h27

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