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++/CLI Discussion :

libération mémoire appel function dll externe delphi


Sujet :

C++/CLI

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 86
    Par défaut libération mémoire appel function dll externe delphi
    Bonjour a tous,

    J'ai un souci de mémoire..j'utilise une dll externe faite en delphi..je suis en c#.
    si il y a une seule utilisation de la function cela se passe bien...
    par contre si je fait une boucle...la par contre je me suis rendu compte que la mémoire vive grimpe beaucoup trop ( 4 Mo par appel)..il me faut donc pouvoir libérer cette mémoire dans la boucle..

    une exemple de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    [DllImport("nomdeladll.dll")]
    public static extern int nomfunction(String s1, String s2, StringBuilder s3,long iBufferSize);
    ...
    int valeurparam;
    StringBuilder buffer = new StringBuilder(40);
    for (int i=O;i<60;i++)
    {
    valeurparam = nomfunction(Path, Name,buffer,buffer.Length);
    //la mémoire grimpe pour chaque appel...
    }
    Voila, si une personne peut me donner un coup de main..j'ai lu les 2 tuto du managé et non managé....mais cela ne ressout pas, sauf erreur de ma part, ma situation..
    Merci par avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 86
    Par défaut
    Re Bonjour a tous,

    je ne parviens pas à soltionner mon souci...
    vais je etre obligé de créer un .exe a part..qui va utiliser la dll qui mange de la mémoire....afin de libérer la mémoire en trop a la fin du .exe.?....
    personne ne peut donner son avi.?

  3. #3
    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
    Ben si c'est la DLL qui a des fuites mémoires, je vois pas très bien ce que tu peux y faire, à moins de pouvoir la corriger... L'exe qui utilise la DLL est une solution, mais tu vas perdre en performances

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 86
    Par défaut
    Merci Tomlev pour ta réponse....content de voir que l'exe a part est une solution....

    est ce que tu peux me dire ce que toi tu ferais dans le code pour essayer de libérer la mémoire en manuel.?...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [DllImport("nomdeladll.dll")]
    public static extern int nomfunction(String s1, String s2, StringBuilder s3,long iBufferSize);
    ...
    int valeurparam;
    StringBuilder buffer = new StringBuilder(40);
    for (int i=O;i<60;i++)
    {
    //////libération manuelle de la mémoire..?....comment..?
    valeurparam = nomfunction(Path, Name,buffer,buffer.Length);
    //la mémoire grimpe pour chaque appel...
    }
    Merci par avance de votre réponse si vous avez 2 minnutes.....

  5. #5
    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 didoboy Voir le message
    est ce que tu peux me dire ce que toi tu ferais dans le code pour essayer de libérer la mémoire en manuel.?...
    Ben y a rien à faire, le programme ne peut pas contrôler ce que fait la DLL...
    Par contre si tu as le code source de la DLL, tu peux toujours essayer de la corriger

    Par contre il y a un truc foireux dans ton code : buffer.Length ne te donne pas la taille du StringBuilder, mais la longueur de la chaine actuellement dans le StringBuilder (soit 0 quand tu viens de créer le StringBuilder). Il faut utiliser buffer.Capacity à la place

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 86
    Par défaut
    Merci tomlev de ta réponse...
    Je pensais qu'il y avait un échapatoire avec le GC...ou bien en indiquant que l'appel de cette méthode devait etre non géré par le ramasse miette..enfin bref...qu'il était possible d'allouer de l'espace avant appel..puis de libérer l'espace aprés appel....
    ..oui tu as raison pour le .lenght....j'ai mis cela un peu rapide....

    sinon, ben, j'ai déplacé mon bout de code afin et crée un .exe..qui lui fait appel a la fameuse dll....cela résout mon souci de fuite mémoire.....mais bon....je laisse le post ouvert quelque temps, au cas ou une personne ait une idée pour : gérer la fuite mémoire de la dll externe ( qui elle meme appelle une autre dll)...sans avoir la main sur le code.
    Merci encore.

Discussions similaires

  1. problème libération mémoire après une DLL
    Par salseropom dans le forum C
    Réponses: 22
    Dernier message: 03/09/2008, 12h51
  2. Réponses: 17
    Dernier message: 27/04/2007, 11h06
  3. Réponses: 4
    Dernier message: 01/06/2006, 15h55
  4. Réponses: 12
    Dernier message: 12/05/2006, 09h21
  5. Appel aux fonctions d'une DLL externe ??
    Par Fbartolo dans le forum Access
    Réponses: 7
    Dernier message: 21/11/2005, 17h54

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