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++Builder Discussion :

Vidage et lib�ration de la m�moire


Sujet :

C++Builder

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    93
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 93
    Par d�faut Vidage et lib�ration de la m�moire
    Bonjour,

    Je suis sous Builder C++ XE7

    Mon programme donne acc�s par une liste � des doossiers de donn�es (num�riques et alpha).

    Si je double clique dans la liste j'ouvre le dossier de donn�es correspondant.

    Je stocke une partie des donn�es dans un TStrinGrid en allant les chercher dans une base de donn�es, pour �viter d'aller dans cette base de nombreuses fois lors de leur consultation.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    StringGrid1 = new TStringGrid(Form1);
    StringGrid1->Parent = Form1;
    StringGrid1->Visible = false;
    StringGrid1->RowCount = 10000;
    StringGrid1->ColCount= 18;
    Ensuite intervient le chargement de donn�es (donn�es statistiques sur des corpus textuels dont la taille peut aller � 100Mo).

    En m�moire, avant ce chargement le programme occupe 100Mo de Ram, apr�s le chargement on peut passer � 300Mo.

    Quand je ferme la fen�tre de consultation, je supprime le tableau :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
     
    StringGrid1->Free();
    delete StringGrid1;
    StringGrid1 = NULL;
    Or dans la m�moire, la RAM, (les 200Mo suppl�mentaires) ne se lib�rent pas.

    J'ai d�j� utiliser ce type de commande sans il me semble avoir rencontr� de probl�me.

    Merci pour toute indication.

  2. #2
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Responsable de compte
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par d�faut
    Salut
    ce comportement ben que surprenant est normal

    dans ton code
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    StringGrid1 = new TStringGrid(Form1);
    le propri�taire de la Grille est la Form qui est charg�e de sa suppression
    si tu d�sire g�rer toi m�me ce composant ce param�tre doit �tre NULL

    tu trouvera ci-dessous un code d'exemple

    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
     
    le .H
    // ---------------------------------------------------------------------------
     
    #ifndef MainH
    #define MainH
    // ---------------------------------------------------------------------------
    #include <System.Classes.hpp>
    #include <Vcl.Controls.hpp>
    #include <Vcl.StdCtrls.hpp>
    #include <Vcl.Forms.hpp>
    #include <Vcl.Grids.hpp>
    // ---------------------------------------------------------------------------
     
    class TForm140 : public TForm
     {
    	__published: // Composants gérés par l'EDI
    	TButton *Create;
    	TButton *FreeMem;
    	TButton *DeleteGrid;
    	void __fastcall FreeMemClick(TObject *Sender);
    	void __fastcall DeleteGridClick(TObject *Sender);
       private: // Déclarations utilisateur
    		TStringGrid* mGrid;
    		void __fastcall FillGrid();
    	public: // Déclarations utilisateur
    		__fastcall TForm140(TComponent* Owner);
     
      };
     // ---------------------------------------------------------------------------
     extern PACKAGE TForm140 *Form140;
    // ---------------------------------------------------------------------------
    #endif
    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
     
    le .cpp
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Main.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm140 *Form140;
    //---------------------------------------------------------------------------
    __fastcall TForm140::TForm140(TComponent* Owner)
    	: TForm(Owner)
    {
     
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm140::CreateClick(TObject *Sender)
    {
       System::Classes::TComponent* AOwner=NULL;
       mGrid= new TStringGrid(AOwner);
       mGrid->ColCount=0;
       mGrid->RowCount=0;
       mGrid->Parent=Form140;
       mGrid->Left=50;
       mGrid->Top=60;
       FillGrid();
       mGrid->Show();
    }
     
    //---------------------------------------------------------------------------
    void  __fastcall TForm140::FillGrid()
    {
      int Ln(10000);
      int cl(100);
      mGrid->ColCount=cl;
      mGrid->RowCount=Ln;
      for (int c=0; c < Ln; c++) {
    	  for(int l=0; l < cl; l++){
    	  mGrid->Cells[c][l]=L"Informations de tests pour vérifier le comportement de la mémoire sous Win32 ";
     
    	  }
     
       }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm140::FreeMemClick(TObject *Sender)
    {
    	for (int Cl=0; Cl < mGrid->ColCount ; Cl++) {
    	 for (int Rw=0; Rw < mGrid->RowCount ; Rw++) {
    	   mGrid->Cells[Cl][Rw]="";
    	 }
    	}
    	mGrid->ColCount=0;
    	mGrid->RowCount=0;
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm140::DeleteGridClick(TObject *Sender)
    {
      delete mGrid;
    }
     
    //---------------------------------------------------------------------------
    Explication

    le bouton Create initialise un composant TStringGrid
    le remplissage de cette Grille est r�alis� dans la proc�dure FillGrid avec 10000 Lignes et 100 colonnes avec un contenu cons�quent
    r�sultat la consommation m�moire passe � 216 Mega
    la lib�ration de la m�moire se passe dans la proc�dure FreeMemClick on remarque que le tableau est vide mais pas la m�moire consomm�e
    ce n'est que lorsque la proc�dure DeleteGridClick est appel�e que le tableau est d�truit et la m�moire revient pratiquement � son occupation avant l'appel

    Conclusion g�re toi m�me le composant

    cordialement
    vous trouverez mes tutoriels � l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les r�gles du forum

Discussions similaires

  1. Lib�ration de la m�moire
    Par Premium dans le forum C
    R�ponses: 4
    Dernier message: 09/08/2006, 18h15
  2. [CSV] Lib�ration de la m�moire
    Par cedricgirard dans le forum Langage
    R�ponses: 7
    Dernier message: 05/01/2006, 12h02
  3. lib�ration de la m�moire apr�s traitement ?
    Par isachat666 dans le forum MS SQL Server
    R�ponses: 2
    Dernier message: 07/12/2005, 19h29
  4. [VB]Lib�ration de la m�moire
    Par seroa dans le forum VB 6 et ant�rieur
    R�ponses: 13
    Dernier message: 12/10/2005, 11h52
  5. Lib�ration de la m�moire
    Par gibet_b dans le forum Composants VCL
    R�ponses: 3
    Dernier message: 30/06/2004, 12h02

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