Tableau dynamique et depassement de capacité ???

Résolu
Signaler
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
-
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
-
Voila pour être bref, j'utilise une fonction recursive qui va charger tout les fichiers de mon disque dans un Tableau. (déja vous vous dite.. "ce mec là c'est un porc" , mais bon ...).

Le problème est le suivant, si je declare un tableau dynamique, et ensuite je lui donne une taille definitive avec SetLength, et je travail après avec (je le rempli avec mes nom de fichier), aucun problemes, mais voila le nombre de fichier n'est pas une valeur constante.

<HR>
Donc en static (comme un gros porc çà marche ..)

type FichierData = record <= donc un pt'it record pour mes fichiers :)
idx : LongWord;
nom : string;
dossier : string;
date : integer;
taille : integer;
end;

StructureFichier : Array [0..10000] of FichierData;

<HR>

Donc j'me suis dit j'vais crée un tableau dynamique qui va grossir en fonction du nombre de fichiers, donc au fur et a mesure que je trouve un fichier, j'incremente mon tableau d'un champs et je rempli le champs. Ca marche mais la problème .. la memoire explose, çà depasse les 300 Mo et çà fini par planté [Evidemment ]


<HR>

En dynamique (çà bouffe des ressources a mort...)

StructureFichier : Array of FichierData;

For ..etc.. do begin
... etc..
SetLength( StructureFichier, Length(StructureFichier) +1 );
StructureFichier[High(StructureFichier)].nom := hFind.Name; <= mon fichier trouver
..Etc...
End;

<HR>

Donc ma question ( ' enfin ' ) ..
Sans réalloué la memoire je ne dépasse pas les 10 Mo, donc c pas un problème de contenu, donc comment réalloué un tableau dynamique (fréquement) et le remplir sans que çà me bouffe toute mes ressources et que çà mette 3 ans ?

Putain j'ai commencer avec "je vais etre bref" mais en faite j'ai été pompeux , mais bon qi qqn pourrai m'aidé je trouve d'aide nul par a ce sujet, et j'ai une appli a finir rapidement et çà me gave .

Merci d'avance a la communauté
-ElGuevel-

5 réponses

Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
salut,

as-tu essayé d'utiliser une liste chainee?

je m'explique:

tu declare un pointeur

type:

PFichierData = ^FichierData

tu declare ton fichier data



type FichierData = record <= donc un pt'it record pour mes fichiers :)

idx : LongWord;

nom : string;

dossier : string;

date : integer;

taille : integer;

suivant:PFichierData ;

end ;

puis une variable

var

pointcourant::PFichierData =nil;

StructureFichier :PFichierData = nil;

au debut tu intialises ta liste:



new (StructureFichier );

//creation du point d'entree

StructureFichier .suivant =nil; //non indispensemble mais utile pour connaitre la fin de la liste;

pointcourant:= StructureFichier ; //pour acceder

ensuite chaque fois que tu ajoutes un fichier tu fais

new(pointcourant^.suivant); // attribue l'espace memoire pour nouvelle entree

pointcourant: =pointcourant^.suivant; //pour acceder

with pointcourant^ do

begin

suivant: =nil; //comme precedemment

.

.

end;

c'est une autre façon de proceder qui permet de faire varier la taille dynamiquement d'une structure

pour liberer la memoire tu utilise dispose pour chaque point d'entree



bonne prog
Messages postés
99
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
26 juillet 2007
2
Tu peux utiliser aussi TList qui est une liste de pointeurs vers ce que tu veux et tu peux accéder aux éléments comme pour un tableau.

Roud59
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
Merci beaucoup jlen100,

je n'ai pas encore tester ta solution mais je vais potassé tout çà de plus près çà l'air très interessant :)

J'te ferai savoir plus tard si çà à marché ou pas.

Allé au boulot ...
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
exact round59 je n'avais pas penser à Tlist qui est est plus faclie de manipulation.
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
Merci à TOUS !

Après avoir galéré avec les listes chainées, j'ai fait comme la conseillé "roud59", j'ai utilisé une Tlist.. et çà déchire !

Très simple d'utilisation, je liste mes fichiers et je les memorises dans la 'Tlist' à une vitesse impressionante ( 50000 fichiers en 2s environ )

Ensuite je recherche les doublons dans cette liste, c'est bcp plus long, mais c'est une autre histoire.. en tout cas çà marche nikel !

Merci encore...