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

Delphi Discussion :

[Delphi5] Gestion mémoire


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 89
    Par défaut [Delphi5] Gestion mémoire
    Bonjour,

    J'ai fait une application en deplhi5.

    cette application marche tous le temps. Tous les 5 minutes appel de fonction pour lire des fichier. A début cette application utilise peu de mémoire mais après quelque heures elle utiliser beaucoup de mémoire.

    A fin de mes fonctions, comment faire libérer toutes mémoire utiliser par cette fonction ?

    J'utilise aussi un tableau de strings que je met a jour tous les 5 minutes. Au début de je fait

    For i:=0 To 100
    Do begin
    Donne[i].cley:='';
    Donne[i].heure:=strTotime('00:00:00');
    Donne[i].Codecomposant:='';
    Donne[i].requis:=0;
    Donne[i].Prise:=0;
    Donne[i].vision:=0;
    end;
    Mais je ne pense pas que cela me libéré de la mémoire. Comment faire pour "libérer de la mémoire" ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Par défaut
    Assure toi qu'à la fin de l'utilisation de ta fonction, tous les objets qui ont été créé dynamiquement soit libéré.

    ex:
    monObjet.free;

    Si la fonction est dans une form, et que cette forme n'est plus utilisée par la suite, tu peux la créer dynamiquement dans l'appli (application.createform(,)). De cette manière, à la fin du traitement, tu n'a plus qu'a faire un
    maForm.release.

    Je sais pas si ça t'aide, mais bon (le principal n'est-il pas de participé?)

  3. #3
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 158
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 158
    Par défaut
    Montre-nous donc ce qui se passe toutes les 5 minutes.
    --
    jp

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 89
    Par défaut
    j'ai un fonction timer

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      Time_hour,Time_Min,sec,msec : word;
      lire : boolean;
      i : integer;
      Debut,fin : Ttime;
    begin
    Try
    If Form1.tag=0
      then begin
      Form1.visible:=false;
      form1.tag:=1;
      end;
    decodeTime(time, Time_Hour, Time_Min, Sec, MSec);
    Timer1.Interval:=(60-sec)*1000;
    lire:=false;
    //Timer1.Enabled:=False;
     
    for i:=0 to 60
      do begin
        if (i*temps)=Time_min
            then begin
            Lire:=True;
            break;
            end;
        If (i*temps)>60 then break;
      end;
     
    If lire=true
      then begin
      st.panels[1].text:=DateTimeToStr(Now)+' : Lecture';
      for i:=0 to mach_num.count-1
          do LireMachine(i);
     
      end;
     
     
     
     
    If (Time_min=0) or (Time_min=15) or (Time_min=30)  or (Time_min=45)
      Then begin   //comptage fichier }
       if Time > (Compt*(1/24))
          then begin
          If Timer1.tag = 1
            then begin
            st.panels[2].text:=DateTimeToStr(Now)+' : compatage';
            debut:=Time-Compt*(1/24)-StrToTime('00:15:00');
            fin:=Debut+StrToTime('00:15:00');
            end
            else begin
            st.panels[2].text:=DateTimeToStr(Now)+' : compatage 1';
            debut:=StrToTime('00:00:00');
            fin:=Time-Compt*(1/24);
            end;
     
          for i:=0 to mach_num.count-1
                do Comptage(i,debut,fin);
     
     
          Timer1.tag:=1;
     
          //fichierlog('Compatage');
         end;
       end;
     
     
     
    //synchronisation di timer
    decodeTime(time, Time_Hour, Time_Min, Sec, MSec);
    Timer1.Interval:=(60-sec)*1000;
    Timer1.Enabled:=true;
    except
    end;
    end;
    cette fonction appel d'autre fonction mais tous dans Tform1.

    Je pense que dans mon programme, il doit me manque beaucoup de xxx.free.

    Mais il n'as pas un autre fonction qui permet de libérer la mémoire de tous les objets plus utiliser.

  5. #5
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 158
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 158
    Par défaut
    Mais il n'as pas un autre fonction qui permet de libérer la mémoire de tous les objets plus utiliser.
    Pas à ma connaissance, d'autant plus que tu zappes un sacro-saint principe : quand tu crées un objet, tu le gères jusqu'au bout, et c'est toi qui le détruit à la fin.
    il doit me manque beaucoup de xxx.free
    Sûrement, car il n'y a rien de spécial dans le code posté, sauf l'appel à d'autres procédures dont on ne sait pas ce qu'elles font, mais tu vas pas non plus tout nous poster, hein
    Cherche : autant de "Create", autant de "Free".
    Enfin, c'est le principe.
    --
    jp

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Par défaut
    Désolé,

    Delphi n'intègre pas de garbage collector comme en Java. On travail à l'ancienne ici , rien ne se crée rien ne se perd...sauf si tu en à décidé autrement

    Bon courage

  7. #7
    Membre éclairé

    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    286
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 286
    Par défaut
    Ben déja tu mets en commentaire tes 2 fonctions qui sont appelées, et tu regardes si ca plante au bout de quelques heures ...

    Par contre il faut savoir que Delphi doit gérer la mémoire et la vider de temps en temps et pas forcément au moment ou on penserait ... (hypothèse)
    Je m'étais posé cette question en travaillant sur du vb.net, la taille de la mémoire augmentait sans raison, mais ne saturait jamais, ca fluctuait en fait montée ... descente ... montée ...

Discussions similaires

  1. Thread POSIX et gestion mémoire
    Par pier* dans le forum POSIX
    Réponses: 1
    Dernier message: 07/07/2006, 21h36
  2. TAO, Value types et gestion mémoire
    Par TiChabin972 dans le forum CORBA
    Réponses: 1
    Dernier message: 25/04/2006, 20h55
  3. [D7] Tableau dynamique et Gestion mémoire
    Par Cl@udius dans le forum Langage
    Réponses: 7
    Dernier message: 13/03/2006, 15h16
  4. [Gestion mémoire] SetLength sur TDoubleDynArray
    Par MD Software dans le forum Langage
    Réponses: 14
    Dernier message: 24/04/2005, 21h11
  5. Gestion mémoire des Meshes (LPD3DXMESH)
    Par [Hideki] dans le forum DirectX
    Réponses: 1
    Dernier message: 08/07/2003, 20h34

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