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

  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.

  7. #7
    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
    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..
    Ben le GC ne peut g�rer que la m�moire qu'il a allou� lui-m�me... l� c'est de la m�moire non g�r�e, allou�e par le syst�me

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