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 :

Fuite mémoire sur composant tiers


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Points : 11
    Points
    11
    Par défaut Fuite mémoire sur composant tiers
    Bonjour,

    J'ai un soucis dans mon programme avec une DLL achetée à un éditeur. En gros mon code est comme suit :

    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
     
    Nouveau thread appelé régulièrement
    {
    	loop(~15)
    	{
     
    		//code divers et varié sans fuite mémoire
     
    		using(appel à la dll tiers)
    		{
     
    			//code assez cours créant une image et l'enregistrant dans un fichier
     
    		}
    	}
    }
    Mon problème c'est qu'à chaque utilisation de la dll, mon application prend un méga de plus en mémoire. C'est très génant car elle est destiné à devenir une tâche de fond sur un serveur.

    Bien entendu la DLL tiers ne peut être remplacée simplement (code complexe, coût élevé...).

    Comme j'utilise un using, je pense que la DLL stock les images dans un tableau static ou un truc du style et ce n'est donc pas collecté par le GC avant la fin de l'application... Comment tester si c'est le cas et comment me débarrasser de tout ce qui est stocké ?
    Peut on démonter une classe chargée en mémoire (et donc vider tous les static) ?

    Si vous avez des pistes pour régler mon problème, n'hésitez pas.

    Cordialement,
    Swann

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Peut être essayer GC.Collect() ...
    Sinon il y a le bricolage pur et dur qui peut mener à avoir le bon résultat : en .NET on ne peut pas décharger un module comme ça, il faut absolument décharger un domaine d'application en entier.

    Donc le principe : tu crées un nouveau domaine d'application (AppDomain et AppDomainSetup), dedans tu charges une classe qui sera chargée d'effectuer ces opérations (AppDomain.CreateInstanceFromAndUnwrap) et comme c'est dans cette classe que tu appelles ton code c'est dans ce nouveau domaine que la mémoire va augmenter. A la fin de ton travail, tu fais un AppDomain.Unload pour ainsi libérer toutes la mémoire utilisée par ce domaine et donc en même temps décharger la dll "fautive".

Discussions similaires

  1. Eviter une fuite mémoire sur un thread
    Par BuzzLeclaire dans le forum Langage
    Réponses: 9
    Dernier message: 03/11/2011, 11h06
  2. Problème de fuite mémoire sur un FLV
    Par p3ga5e dans le forum Flash
    Réponses: 0
    Dernier message: 05/10/2010, 16h15
  3. [iPad] Fuite mémoire sur iPad
    Par Palca dans le forum Objective-C
    Réponses: 3
    Dernier message: 02/05/2010, 18h39
  4. Fuite mémoire sur composants Indy 9.0.50
    Par Fbartolo dans le forum C++Builder
    Réponses: 15
    Dernier message: 30/04/2009, 15h47
  5. Problème de fuite mémoire sur un idFTP
    Par jeromelef dans le forum Composants VCL
    Réponses: 6
    Dernier message: 26/07/2005, 17h29

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