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 :

Fuites mémoire - objets COM


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 174
    Points : 38
    Points
    38
    Par défaut Fuites mémoire - objets COM
    Bonjour à tous,

    J'ai un soucis de fuites mémoire dans mon appli C# qui semble lié au fait que je fais appel à une API qui me renvoie une liste d'objets COM.

    Ci-dessous un exemple simplifié de mon code :

    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
    16
     
            public static ReadOnlyCollection<APICOMObject> GetBOObjectsByVolume(int iCounter)
            {
                MyAPIFilter oVolumeFilter = new MyAPIFilter(iCounter);
                ReadOnlyCollection<BusinessObject> _retVal = oVolumeFilter.Apply();
            }
     
                ReadOnlyCollection<APICOMObject> _listeObj;
                for (int icpt = 0; icpt < 1000; icpt++)
                {
                    _listeObj = GetBOObjectsByVolume(icpt);
     
                    //GC.Collect();
                    //GC.WaitForPendingFinalizers();
                    //GC.Collect();
                }
    A l’exécution, le code ci-dessus consomme de plus en plus de mémoire jusqu'à lever une exception "OutOfMemory". Par contre, si je décommente les lignes GC.*, l'utilisation de la mémoire reste stable.

    Du coup, je ne sais pas trop comment gérer mon soucis de manière propre : il ne me semble pas très propre de forcer l'appel au garbage collector.


    Merci d'avance...

  2. #2
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Bonjour,

    Quand vous n'avez plus besoin de votre objet COM vous pouvez le libérer explicitement avec Marshal.ReleaseComObject avant l'itération suivante

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 174
    Points : 38
    Points
    38
    Par défaut
    OK.
    Merci pour la réponse.
    Du coup je ne comprends pas pourquoi quand j'appelle le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    GC.Collect();   
    GC.WaitForPendingFinalizers();
    GC.Collect();
    ca libère mes objets.


    Citation Envoyé par Sankasssss Voir le message
    Bonjour,

    Quand vous n'avez plus besoin de votre objet COM vous pouvez le libérer explicitement avec Marshal.ReleaseComObject avant l'itération suivante

Discussions similaires

  1. Réponses: 9
    Dernier message: 05/10/2017, 18h36
  2. Singleton et Fuite mémoire avec objet STL
    Par Robxley dans le forum C++
    Réponses: 7
    Dernier message: 09/02/2011, 11h01
  3. Gestion mémoire objet COM
    Par karl2mil1 dans le forum Framework .NET
    Réponses: 0
    Dernier message: 09/02/2009, 11h17
  4. [ATL-COM] Identifier l'origine d'une fuite mémoire
    Par Mat.M dans le forum Visual C++
    Réponses: 5
    Dernier message: 20/06/2007, 19h47
  5. Désenregistrement d'Objets COM sous Windows
    Par barthelv dans le forum Windows
    Réponses: 2
    Dernier message: 21/05/2003, 15h11

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