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

Langage Delphi Discussion :

Application mémoire utilisée grossit


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 67
    Par défaut Application mémoire utilisée grossit
    Bonjour à tous je suis toujours sur mon Active X, celui-ci se termine par contre je viens de me rendre compte qu'au bout d'un moment, j'ai regardé la taille mémoire utilisé et celle ci grossit, mais je ne sais d'ou cela peut provenir.

    J'ai 2 tableaux de [128]*[128] que je remplis toutes les secondes de nouvelles valeurs est ce que cela pourrait venir de ceci. Voici le code pour l'initialisation des tableaux au démarrage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Setlength(Tab,Nbreligne+1,NbrePoint+1);      // Initialisation du tableau de travail
    Setlength(TabTemp,Nbreligne+1,NbrePoint+1);  // Initialisation du tableau de stockage
    Initialize();
    Mais j'utilise aussi des appels de DLL pour aller chercher les valeurs d'une autre systeme pour remplir mes tableaux.
    le code d'initialisation des fontions DLLs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function DDAQ_DEVICE_DO_UPDATEDATA(nDevNo:LongWord):LongWord;stdcall;external 'DIASDAQ';
    function DDAQ_DEVICE_GET_NEWDATAREADY(nDevNo:integer;pBool:Pointer):LongWord;stdcall;external 'DIASDAQ';
    function DDAQ_IRDX_PIXEL_GET_DATA_POINT(hIRDX:THandle;x:Word;y:Word;pdata:pointer):LongWord;stdcall;external 'DIASDAQ';
    Le code suivant est le code réalisé dans mon timer 1s
    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
     
    pOk:=@Ok;//pointeur
    DDAQ_DEVICE_GET_NEWDATAREADY(nDevNo,pOk);    // on vérifie si une donnée est prête
    DDAQ_DEVICE_DO_UPDATEDATA(nDevNo);           //on met a jour la donnée
    Data:=1.000;
    pData:=@Data;
            for i:=0 to NbreLigne-1 do
    begin
           for j:=0 to NbrePoint-1 do
           begin
           DDAQ_IRDX_PIXEL_GET_DATA_POINT(handleIRDX,j+1,i+1,pData);
           dataValue:=pData^;
           tab[i,j]:=dataValue;
           end;
    end;
    et après avoir rempli mon tableau, je le recopie dans 2 éme pour pouvoir travailler avec, puis je dessine un histogramme via un canvas, que je libere evidement aprs chaque dessin par la fonction free.

    merci pour votre aide

  2. #2
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    ya pas 36 solutions : Si la memoire grossit, c'est qu'il y a une fuite quelque part.
    Verifie bien toutes tes creation memoire

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 67
    Par défaut
    Si elle grossit c'est forcement une fuite memoire mais est ce que cela peut se trouver dans tout mon code ou uniquement celui qui est utilisé en permanance c'est a dire dans mon Timer, j'ai mis le code que j'utilisais.

    A ton avis, j'ai un doute sur mes appels Dlls, j'utilise les poiteur mais quand tu regarde mon code, je ne les liberes pas est ce que je devrais le faire qu'une seule fois.

    Je m'explique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pOk:=@Ok;
    DDAQ_DEVICE_GET_NEWDATAREADY(nDevNo,pOk);    // on vérifie si une donnée est prête
    j'attribue a chaque appel de ma fonction timer pOk. peut etre que je devrais le faire qu'une seule fois, je n'ai peut etre pas besoin de refaire à chaque fois un pOk=@Ok.

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Fais-tu un Application.ProcessMessages dans ton OnTimer ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 67
    Par défaut
    Non, je ne fais pas cette fonction, pourkoi je devrais?

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Non, tu ne dois pas, car cela peut provoquer un empilement de procédure (sans débordement) et donc de la consommation mémoire ...

    Mais je cherchais une piste de fuite

    fais-tu des New ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Mémoire utilisée par mon application
    Par Sephiroth Lune dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 30/05/2012, 14h21
  2. afficher statut de la mémoire utilisée par l'application
    Par lakhdar16 dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/05/2012, 11h14
  3. Mémoire utilisée par application
    Par PhilLU dans le forum Débuter
    Réponses: 2
    Dernier message: 03/03/2011, 08h37
  4. Réponses: 2
    Dernier message: 01/10/2009, 11h00
  5. [Info][Mémoire] utilisée pour un pointeur null
    Par thomas_strass dans le forum Langage
    Réponses: 14
    Dernier message: 04/11/2004, 12h48

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