Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Gestion de la mémoire [ Archives / J'AI BESOIN D'AIDE !!!! :O ] (laurentl2000)

mardi 22 juillet 2003 à 12:51:04 | Gestion de la mémoire

laurentl2000

Bonjour,

J'ai créé un programme qui exécute de très longues boucles... Seulement, après un certain temps d'exécution, un message EOutOfMemory ("Out of memory") apparait.

Quelqu'un pourrait-il m'aider dans l'utilisation de la gestion de la mémoire utilisée ? Comment "vider" la mémoire que le logiciel a requis alors qu'elle n'est plus utilisée ? Et comment localiser la partie de la mémoire concernée ?

Faut-il employer sysFreeMem ? Et comment ?

Si quelqu'un a une info sur la gestion de la mémoire ou une éventuelle réponse à une de mes questions, cela m'intéresse !

Merci ! ;-)

Trash

mardi 22 juillet 2003 à 13:02:42 | Re : Gestion de la mémoire

sablor



Deja as tu verifier dans ta boucle que tu liberes bien la memoire des objets dont tu n'as plus besoin...Pour liberer la memoire des objets qui ne sont plus utilier il faut utiliser la fonction Free : MyObject.Free;

Pour chercher a quel endroit tu a le probleme tu peux essayer avec MemCheck(unite a mettre et a configurer dans ton projet) ou bien avec le logiciel MemorySleuth de TurboPower, ou encore BoundChecker...

C'est quand meme bizarre ton truc... Tu As combien de memoire???


Sablor



-------------------------------
Réponse au message :
-------------------------------

> Bonjour,
>
> J'ai créé un programme qui exécute de très longues boucles... Seulement, après un certain temps d'exécution, un message EOutOfMemory ("Out of memory") apparait.
>
> Quelqu'un pourrait-il m'aider dans l'utilisation de la gestion de la mémoire utilisée ? Comment "vider" la mémoire que le logiciel a requis alors qu'elle n'est plus utilisée ? Et comment localiser la partie de la mémoire concernée ?
>
> Faut-il employer sysFreeMem ? Et comment ?
>
> Si quelqu'un a une info sur la gestion de la mémoire ou une éventuelle réponse à une de mes questions, cela m'intéresse !
>
> Merci ! ;-)
>
> Trash

mardi 22 juillet 2003 à 14:21:43 | Re : Gestion de la mémoire

laurentl2000

La méthode Free supprime l'objet concerné de la mémoire... Mais je réemploie tous les objets dans les boucles suivantes, je ne peux donc pas les supprimer...

Je vais tester les logiciels que tu me proposes...

Pour info technique, j'ai une barrette SDRAM PC-133 256Mo...

Bien à toi,

Trash



-------------------------------
Réponse au message :
-------------------------------

>
>
> Deja as tu verifier dans ta boucle que tu liberes bien la memoire des objets dont tu n'as plus besoin...Pour liberer la memoire des objets qui ne sont plus utilier il faut utiliser la fonction Free : MyObject.Free;
>
> Pour chercher a quel endroit tu a le probleme tu peux essayer avec MemCheck(unite a mettre et a configurer dans ton projet) ou bien avec le logiciel MemorySleuth de TurboPower, ou encore BoundChecker...
>
> C'est quand meme bizarre ton truc... Tu As combien de memoire???
>
>
> Sablor

>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Bonjour,
> >
> > J'ai créé un programme qui exécute de très longues boucles... Seulement, après un certain temps d'exécution, un message EOutOfMemory ("Out of memory") apparait.
> >
> > Quelqu'un pourrait-il m'aider dans l'utilisation de la gestion de la mémoire utilisée ? Comment "vider" la mémoire que le logiciel a requis alors qu'elle n'est plus utilisée ? Et comment localiser la partie de la mémoire concernée ?
> >
> > Faut-il employer sysFreeMem ? Et comment ?
> >
> > Si quelqu'un a une info sur la gestion de la mémoire ou une éventuelle réponse à une de mes questions, cela m'intéresse !
> >
> > Merci ! ;-)
> >
> > Trash
>

mardi 22 juillet 2003 à 14:36:48 | Re : Gestion de la mémoire

sablor



Tu reemploies les objets au fur et à mesure mais comment avec 256 Mo de RAM tu peux tout remplir ...

Si tu as besoin d'un coup de main donne un peu plus d'explication sur ton algo et l'allocation de tes objets...
Je pense que tu as besoin d'optimiser l'utilisation de tes objets!

A+
Sablor



-------------------------------
Réponse au message :
-------------------------------

> La méthode Free supprime l'objet concerné de la mémoire... Mais je réemploie tous les objets dans les boucles suivantes, je ne peux donc pas les supprimer...
>
> Je vais tester les logiciels que tu me proposes...
>
> Pour info technique, j'ai une barrette SDRAM PC-133 256Mo...
>
> Bien à toi,
>
> Trash
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> >
> >
> > Deja as tu verifier dans ta boucle que tu liberes bien la memoire des objets dont tu n'as plus besoin...Pour liberer la memoire des objets qui ne sont plus utilier il faut utiliser la fonction Free : MyObject.Free;
> >
> > Pour chercher a quel endroit tu a le probleme tu peux essayer avec MemCheck(unite a mettre et a configurer dans ton projet) ou bien avec le logiciel MemorySleuth de TurboPower, ou encore BoundChecker...
> >
> > C'est quand meme bizarre ton truc... Tu As combien de memoire???
> >
> >
> > Sablor

> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Bonjour,
> > >
> > > J'ai créé un programme qui exécute de très longues boucles... Seulement, après un certain temps d'exécution, un message EOutOfMemory ("Out of memory") apparait.
> > >
> > > Quelqu'un pourrait-il m'aider dans l'utilisation de la gestion de la mémoire utilisée ? Comment "vider" la mémoire que le logiciel a requis alors qu'elle n'est plus utilisée ? Et comment localiser la partie de la mémoire concernée ?
> > >
> > > Faut-il employer sysFreeMem ? Et comment ?
> > >
> > > Si quelqu'un a une info sur la gestion de la mémoire ou une éventuelle réponse à une de mes questions, cela m'intéresse !
> > >
> > > Merci ! ;-)
> > >
> > > Trash
> >
>

mardi 22 juillet 2003 à 15:11:40 | Re : Gestion de la mémoire

laurentl2000

Voici la partie de mon code source contenant les boucles qui posent problème... Cela te sera sûrement utile de savoir que c'est un programme de recherche brute force d'une chaine chiffrée (txtCasseurEntree)...

var
boucle: integer;
a: integer;
b: integer;
c: integer;
d: integer;
e: integer;
f: integer;
g: integer;
h: integer;
i: integer;
j: integer;
k: integer;
l: integer;
m: integer;
n: integer;
o: integer;
valeura: integer;
valeurb: integer;
valeurc: integer;
valeurd: integer;
valeure: integer;
valeurf: integer;
valeurg: integer;
valeurh: integer;
valeuri: integer;
valeurj: integer;
valeurk: integer;
valeurl: integer;
valeurm: integer;
valeurn: integer;
valeuro: integer;
chaine: string;
nombre: integer;
caracteresMinuscules: string;
caracteresMajuscules: string;
caracteresNumeros: string;
caracteresSpeciaux: string;
multiple: integer;
valu: integer;
value: integer;
test: string;
begin
if Length(txtCasseurEntree.Text) <> 32 then
exit;
marche := True;
stabStatus.Panels[0].Text := 'Casseur : démarré';
stabStatus.Refresh;
cmdCasseurDemarrer.Enabled := False;
cmdCasseurArreter.Enabled := True;
lblCasseurSortieChaineValeur.Font.Color := clSilver;
lblCasseurSortieChaineValeur.Caption := '';
lblCasseurSortieNombreValeur.Caption := '';
nombre := 0;
if chkCasseurCaracteresMinuscules.Checked then
caracteresMinuscules := 'abcdefghijklmnopqrstuvwxyzéèêëàù';
if chkCasseurCaracteresMajuscules.Checked then
caracteresMajuscules := 'ABCDEFGHIJKLMNOPQRSTUVWXYZÉÈÊËÀÙ';
if chkCasseurCaracteresNumeros.Checked then
caracteresNumeros := '1234567890';
if chkCasseurCaracteresSpeciaux.Checked then
caracteresSpeciaux := '³²&|@"#''(§^!{})°-_<>\?,;.:/=+~^s[$*]%Zµ£` ';
chaine := caracteresMinuscules + caracteresMajuscules + caracteresNumeros + caracteresSpeciaux;
valeura := 1;
valeurb := 1;
valeurc := 1;
valeurd := 1;
valeure := 1;
valeurf := 1;
valeurg := 1;
valeurh := 1;
valeuri := 1;
valeurj := 1;
valeurk := 1;
valeurl := 1;
valeurm := 1;
valeurn := 1;
for boucle := 1 to 15 do
begin
multiple := exposant(Length(chaine),boucle);
gauProgression.Progress := 0;
for a := 1 to valeura do
begin
for b := 1 to valeurb do
begin
for c := 1 to valeurc do
begin
for d := 1 to valeurd do
begin
for e := 1 to valeure do
begin
for f := 1 to valeurf do
begin
for g := 1 to valeurg do
begin
for h := 1 to valeurh do
begin
for i := 1 to valeuri do
begin
for j := 1 to valeurj do
begin
for k := 1 to valeurk do
begin
for l := 1 to valeurl do
begin
for m := 1 to valeurm do
begin
for n := 1 to valeurn do
begin
for o := 1 to Length(chaine) do
begin
application.processmessages;
nombre := nombre + 1;
gauProgression.Progress := StrToInt(CurrToStr(round(nombre / multiple * 100)));
if marche <> True then
begin
break;
exit;
end;
test := substr(chaine[a] + chaine[b] + chaine[c] + chaine[d] + chaine[e] + chaine[f] + chaine[g] + chaine[h] + chaine[i] + chaine[j] + chaine[k] + chaine[l] + chaine[m] + chaine[n] + chaine[o],16-boucle,boucle);
if chkCasseurResultats.Checked then
begin
lblCasseurSortieChaineValeur.Caption := test;
lblCasseurSortieNombreValeur.Caption := IntToStr(nombre);
end;
if txtCasseurEntree.Text = chiffrement(test) then
begin
lblCasseurSortieChaineValeur.Caption := test;
lblCasseurSortieNombreValeur.Caption := IntToStr(nombre);
stabStatus.Panels[0].Text := 'Casseur : trouvé [' + test + ']';
lblCasseurSortieChaineValeur.Font.Color := clRed;
gauProgression.Progress := 100;
cmdCasseurDemarrer.Enabled := True;
cmdCasseurArreter.Enabled := False;
exit;
end;
test := '';
if o = Length(chaine) then
valeurn := Length(Chaine);
if n = Length(chaine) then
valeurm := Length(Chaine);
if m = Length(chaine) then
valeurl := Length(Chaine);
if l = Length(chaine) then
valeurk := Length(Chaine);
if k = Length(chaine) then
valeurj := Length(Chaine);
if j = Length(chaine) then
valeuri := Length(Chaine);
if i = Length(chaine) then
valeurh := Length(Chaine);
if h = Length(chaine) then
valeurg := Length(Chaine);
if g = Length(chaine) then
valeurf := Length(Chaine);
if f = Length(chaine) then
valeure := Length(Chaine);
if e = Length(chaine) then
valeurd := Length(Chaine);
if d = Length(chaine) then
valeurc := Length(Chaine);
if c = Length(chaine) then
valeurb := Length(Chaine);
if b = Length(chaine) then
valeura := Length(Chaine);
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
if marche <> True then
begin
break;
exit;
end;
lblCasseurSortieChaineValeur.Caption := '- min. ' + IntToStr(boucle + 1) + ' caractères -';
end;
stabStatus.Panels[0].Text := 'Casseur : arrêté';
end;

La fonction substr() employée est une sorte de reproduction que j'ai faite à partir de PHP, mais elle fonctionne de la même façon...

Il y a-t-il quelque chose de frappant dans ce code ? Ce n'est que mon premier logiciel en Delphi 7... ;-)

Bien à toi,

Trash


-------------------------------
Réponse au message :
-------------------------------

>
>
> Tu reemploies les objets au fur et à mesure mais comment avec 256 Mo de RAM tu peux tout remplir ...
>
> Si tu as besoin d'un coup de main donne un peu plus d'explication sur ton algo et l'allocation de tes objets...
> Je pense que tu as besoin d'optimiser l'utilisation de tes objets!
>
> A+
> Sablor

>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > La méthode Free supprime l'objet concerné de la mémoire... Mais je réemploie tous les objets dans les boucles suivantes, je ne peux donc pas les supprimer...
> >
> > Je vais tester les logiciels que tu me proposes...
> >
> > Pour info technique, j'ai une barrette SDRAM PC-133 256Mo...
> >
> > Bien à toi,
> >
> > Trash
> >
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > >
> > >
> > > Deja as tu verifier dans ta boucle que tu liberes bien la memoire des objets dont tu n'as plus besoin...Pour liberer la memoire des objets qui ne sont plus utilier il faut utiliser la fonction Free : MyObject.Free;
> > >
> > > Pour chercher a quel endroit tu a le probleme tu peux essayer avec MemCheck(unite a mettre et a configurer dans ton projet) ou bien avec le logiciel MemorySleuth de TurboPower, ou encore BoundChecker...
> > >
> > > C'est quand meme bizarre ton truc... Tu As combien de memoire???
> > >
> > >
> > > Sablor

> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Bonjour,
> > > >
> > > > J'ai créé un programme qui exécute de très longues boucles... Seulement, après un certain temps d'exécution, un message EOutOfMemory ("Out of memory") apparait.
> > > >
> > > > Quelqu'un pourrait-il m'aider dans l'utilisation de la gestion de la mémoire utilisée ? Comment "vider" la mémoire que le logiciel a requis alors qu'elle n'est plus utilisée ? Et comment localiser la partie de la mémoire concernée ?
> > > >
> > > > Faut-il employer sysFreeMem ? Et comment ?
> > > >
> > > > Si quelqu'un a une info sur la gestion de la mémoire ou une éventuelle réponse à une de mes questions, cela m'intéresse !
> > > >
> > > > Merci ! ;-)
> > > >
> > > > Trash
> > >
> >
>

mardi 22 juillet 2003 à 15:48:54 | Re : Gestion de la mémoire

sablor



OK ton code a l'air OK mais comme il me manque les trois procedures exposant, substr, chiffrement je ne peux pas definir si il y a un probleme objet...
Si ton code se limite a ce que tu as indique alors je ne vois pas pourquoi tu as ce message...

tu devrais peut etre essayer de mettre ton code dans un try except avec gestion de EOutOfMemory.
A+

Sablor



-------------------------------
Réponse au message :
-------------------------------

> Voici la partie de mon code source contenant les boucles qui posent problème... Cela te sera sûrement utile de savoir que c'est un programme de recherche brute force d'une chaine chiffrée (txtCasseurEntree)...
>
> var
> boucle: integer;
> a: integer;
> b: integer;
> c: integer;
> d: integer;
> e: integer;
> f: integer;
> g: integer;
> h: integer;
> i: integer;
> j: integer;
> k: integer;
> l: integer;
> m: integer;
> n: integer;
> o: integer;
> valeura: integer;
> valeurb: integer;
> valeurc: integer;
> valeurd: integer;
> valeure: integer;
> valeurf: integer;
> valeurg: integer;
> valeurh: integer;
> valeuri: integer;
> valeurj: integer;
> valeurk: integer;
> valeurl: integer;
> valeurm: integer;
> valeurn: integer;
> valeuro: integer;
> chaine: string;
> nombre: integer;
> caracteresMinuscules: string;
> caracteresMajuscules: string;
> caracteresNumeros: string;
> caracteresSpeciaux: string;
> multiple: integer;
> valu: integer;
> value: integer;
> test: string;
> begin
> if Length(txtCasseurEntree.Text) <> 32 then
> exit;
> marche := True;
> stabStatus.Panels[0].Text := 'Casseur : démarré';
> stabStatus.Refresh;
> cmdCasseurDemarrer.Enabled := False;
> cmdCasseurArreter.Enabled := True;
> lblCasseurSortieChaineValeur.Font.Color := clSilver;
> lblCasseurSortieChaineValeur.Caption := '';
> lblCasseurSortieNombreValeur.Caption := '';
> nombre := 0;
> if chkCasseurCaracteresMinuscules.Checked then
> caracteresMinuscules := 'abcdefghijklmnopqrstuvwxyzéèêëàù';
> if chkCasseurCaracteresMajuscules.Checked then
> caracteresMajuscules := 'ABCDEFGHIJKLMNOPQRSTUVWXYZÉÈÊËÀÙ';
> if chkCasseurCaracteresNumeros.Checked then
> caracteresNumeros := '1234567890';
> if chkCasseurCaracteresSpeciaux.Checked then
> caracteresSpeciaux := '³²&|@"#''(§^!{})°-_<>\?,;.:/=+~^s[$*]%Zµ£` ';
> chaine := caracteresMinuscules + caracteresMajuscules + caracteresNumeros + caracteresSpeciaux;
> valeura := 1;
> valeurb := 1;
> valeurc := 1;
> valeurd := 1;
> valeure := 1;
> valeurf := 1;
> valeurg := 1;
> valeurh := 1;
> valeuri := 1;
> valeurj := 1;
> valeurk := 1;
> valeurl := 1;
> valeurm := 1;
> valeurn := 1;
> for boucle := 1 to 15 do
> begin
> multiple := exposant(Length(chaine),boucle);
> gauProgression.Progress := 0;
> for a := 1 to valeura do
> begin
> for b := 1 to valeurb do
> begin
> for c := 1 to valeurc do
> begin
> for d := 1 to valeurd do
> begin
> for e := 1 to valeure do
> begin
> for f := 1 to valeurf do
> begin
> for g := 1 to valeurg do
> begin
> for h := 1 to valeurh do
> begin
> for i := 1 to valeuri do
> begin
> for j := 1 to valeurj do
> begin
> for k := 1 to valeurk do
> begin
> for l := 1 to valeurl do
> begin
> for m := 1 to valeurm do
> begin
> for n := 1 to valeurn do
> begin
> for o := 1 to Length(chaine) do
> begin
> application.processmessages;
> nombre := nombre + 1;
> gauProgression.Progress := StrToInt(CurrToStr(round(nombre / multiple * 100)));
> if marche <> True then
> begin
> break;
> exit;
> end;
> test := substr(chaine[a] + chaine[b] + chaine[c] + chaine[d] + chaine[e] + chaine[f] + chaine[g] + chaine[h] + chaine[i] + chaine[j] + chaine[k] + chaine[l] + chaine[m] + chaine[n] + chaine[o],16-boucle,boucle);
> if chkCasseurResultats.Checked then
> begin
> lblCasseurSortieChaineValeur.Caption := test;
> lblCasseurSortieNombreValeur.Caption := IntToStr(nombre);
> end;
> if txtCasseurEntree.Text = chiffrement(test) then
> begin
> lblCasseurSortieChaineValeur.Caption := test;
> lblCasseurSortieNombreValeur.Caption := IntToStr(nombre);
> stabStatus.Panels[0].Text := 'Casseur : trouvé [' + test + ']';
> lblCasseurSortieChaineValeur.Font.Color := clRed;
> gauProgression.Progress := 100;
> cmdCasseurDemarrer.Enabled := True;
> cmdCasseurArreter.Enabled := False;
> exit;
> end;
> test := '';
> if o = Length(chaine) then
> valeurn := Length(Chaine);
> if n = Length(chaine) then
> valeurm := Length(Chaine);
> if m = Length(chaine) then
> valeurl := Length(Chaine);
> if l = Length(chaine) then
> valeurk := Length(Chaine);
> if k = Length(chaine) then
> valeurj := Length(Chaine);
> if j = Length(chaine) then
> valeuri := Length(Chaine);
> if i = Length(chaine) then
> valeurh := Length(Chaine);
> if h = Length(chaine) then
> valeurg := Length(Chaine);
> if g = Length(chaine) then
> valeurf := Length(Chaine);
> if f = Length(chaine) then
> valeure := Length(Chaine);
> if e = Length(chaine) then
> valeurd := Length(Chaine);
> if d = Length(chaine) then
> valeurc := Length(Chaine);
> if c = Length(chaine) then
> valeurb := Length(Chaine);
> if b = Length(chaine) then
> valeura := Length(Chaine);
> end;
> end;
> end;
> end;
> end;
> end;
> end;
> end;
> end;
> end;
> end;
> end;
> end;
> end;
> end;
> if marche <> True then
> begin
> break;
> exit;
> end;
> lblCasseurSortieChaineValeur.Caption := '- min. ' + IntToStr(boucle + 1) + ' caractères -';
> end;
> stabStatus.Panels[0].Text := 'Casseur : arrêté';
> end;
>
> La fonction substr() employée est une sorte de reproduction que j'ai faite à partir de PHP, mais elle fonctionne de la même façon...
>
> Il y a-t-il quelque chose de frappant dans ce code ? Ce n'est que mon premier logiciel en Delphi 7... ;-)
>
> Bien à toi,
>
> Trash
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> >
> >
> > Tu reemploies les objets au fur et à mesure mais comment avec 256 Mo de RAM tu peux tout remplir ...
> >
> > Si tu as besoin d'un coup de main donne un peu plus d'explication sur ton algo et l'allocation de tes objets...
> > Je pense que tu as besoin d'optimiser l'utilisation de tes objets!
> >
> > A+
> > Sablor

> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > La méthode Free supprime l'objet concerné de la mémoire... Mais je réemploie tous les objets dans les boucles suivantes, je ne peux donc pas les supprimer...
> > >
> > > Je vais tester les logiciels que tu me proposes...
> > >
> > > Pour info technique, j'ai une barrette SDRAM PC-133 256Mo...
> > >
> > > Bien à toi,
> > >
> > > Trash
> > >
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > >
> > > >
> > > > Deja as tu verifier dans ta boucle que tu liberes bien la memoire des objets dont tu n'as plus besoin...Pour liberer la memoire des objets qui ne sont plus utilier il faut utiliser la fonction Free : MyObject.Free;
> > > >
> > > > Pour chercher a quel endroit tu a le probleme tu peux essayer avec MemCheck(unite a mettre et a configurer dans ton projet) ou bien avec le logiciel MemorySleuth de TurboPower, ou encore BoundChecker...
> > > >
> > > > C'est quand meme bizarre ton truc... Tu As combien de memoire???
> > > >
> > > >
> > > > Sablor

> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > Bonjour,
> > > > >
> > > > > J'ai créé un programme qui exécute de très longues boucles... Seulement, après un certain temps d'exécution, un message EOutOfMemory ("Out of memory") apparait.
> > > > >
> > > > > Quelqu'un pourrait-il m'aider dans l'utilisation de la gestion de la mémoire utilisée ? Comment "vider" la mémoire que le logiciel a requis alors qu'elle n'est plus utilisée ? Et comment localiser la partie de la mémoire concernée ?
> > > > >
> > > > > Faut-il employer sysFreeMem ? Et comment ?
> > > > >
> > > > > Si quelqu'un a une info sur la gestion de la mémoire ou une éventuelle réponse à une de mes questions, cela m'intéresse !
> > > > >
> > > > > Merci ! ;-)
> > > > >
> > > > > Trash
> > > >
> > >
> >
>

mardi 22 juillet 2003 à 15:57:54 | Re : Gestion de la mémoire

laurentl2000

Voici les fonctions manquantes :

function exposant(Nombre: integer; Exposant: integer): integer;
var
i: integer;
begin
result := 1;
for i := 0 to Exposant - 1 do
result := result * Nombre;
end;

function substr(Chain: string; Place: integer; Longueur: integer): string;
var
i: integer;
begin
for i := Place + 1 to Place + Longueur do
result := result + Chain[i-1];
end;

La fonction chiifrement(), quant à elle est le résultat de l'utilisation d'un composant qui contient les calculs nécessaires au chiffrement. Je ne pense pas que le problème vienne de là...

Je vais essayer avec un try except, cela me semble être une bonne idée...

Merci pour tes conseils... ;-)

Bien à toi,

Trash



-------------------------------
Réponse au message :
-------------------------------

>
>
> OK ton code a l'air OK mais comme il me manque les trois procedures exposant, substr, chiffrement je ne peux pas definir si il y a un probleme objet...
> Si ton code se limite a ce que tu as indique alors je ne vois pas pourquoi tu as ce message...
>
> tu devrais peut etre essayer de mettre ton code dans un try except avec gestion de EOutOfMemory.
> A+
>
> Sablor

>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Voici la partie de mon code source contenant les boucles qui posent problème... Cela te sera sûrement utile de savoir que c'est un programme de recherche brute force d'une chaine chiffrée (txtCasseurEntree)...
> >
> > var
> > boucle: integer;
> > a: integer;
> > b: integer;
> > c: integer;
> > d: integer;
> > e: integer;
> > f: integer;
> > g: integer;
> > h: integer;
> > i: integer;
> > j: integer;
> > k: integer;
> > l: integer;
> > m: integer;
> > n: integer;
> > o: integer;
> > valeura: integer;
> > valeurb: integer;
> > valeurc: integer;
> > valeurd: integer;
> > valeure: integer;
> > valeurf: integer;
> > valeurg: integer;
> > valeurh: integer;
> > valeuri: integer;
> > valeurj: integer;
> > valeurk: integer;
> > valeurl: integer;
> > valeurm: integer;
> > valeurn: integer;
> > valeuro: integer;
> > chaine: string;
> > nombre: integer;
> > caracteresMinuscules: string;
> > caracteresMajuscules: string;
> > caracteresNumeros: string;
> > caracteresSpeciaux: string;
> > multiple: integer;
> > valu: integer;
> > value: integer;
> > test: string;
> > begin
> > if Length(txtCasseurEntree.Text) <> 32 then
> > exit;
> > marche := True;
> > stabStatus.Panels[0].Text := 'Casseur : démarré';
> > stabStatus.Refresh;
> > cmdCasseurDemarrer.Enabled := False;
> > cmdCasseurArreter.Enabled := True;
> > lblCasseurSortieChaineValeur.Font.Color := clSilver;
> > lblCasseurSortieChaineValeur.Caption := '';
> > lblCasseurSortieNombreValeur.Caption := '';
> > nombre := 0;
> > if chkCasseurCaracteresMinuscules.Checked then
> > caracteresMinuscules := 'abcdefghijklmnopqrstuvwxyzéèêëàù';
> > if chkCasseurCaracteresMajuscules.Checked then
> > caracteresMajuscules := 'ABCDEFGHIJKLMNOPQRSTUVWXYZÉÈÊËÀÙ';
> > if chkCasseurCaracteresNumeros.Checked then
> > caracteresNumeros := '1234567890';
> > if chkCasseurCaracteresSpeciaux.Checked then
> > caracteresSpeciaux := '³²&|@"#''(§^!{})°-_<>\?,;.:/=+~^s[$*]%Zµ£` ';
> > chaine := caracteresMinuscules + caracteresMajuscules + caracteresNumeros + caracteresSpeciaux;
> > valeura := 1;
> > valeurb := 1;
> > valeurc := 1;
> > valeurd := 1;
> > valeure := 1;
> > valeurf := 1;
> > valeurg := 1;
> > valeurh := 1;
> > valeuri := 1;
> > valeurj := 1;
> > valeurk := 1;
> > valeurl := 1;
> > valeurm := 1;
> > valeurn := 1;
> > for boucle := 1 to 15 do
> > begin
> > multiple := exposant(Length(chaine),boucle);
> > gauProgression.Progress := 0;
> > for a := 1 to valeura do
> > begin
> > for b := 1 to valeurb do
> > begin
> > for c := 1 to valeurc do
> > begin
> > for d := 1 to valeurd do
> > begin
> > for e := 1 to valeure do
> > begin
> > for f := 1 to valeurf do
> > begin
> > for g := 1 to valeurg do
> > begin
> > for h := 1 to valeurh do
> > begin
> > for i := 1 to valeuri do
> > begin
> > for j := 1 to valeurj do
> > begin
> > for k := 1 to valeurk do
> > begin
> > for l := 1 to valeurl do
> > begin
> > for m := 1 to valeurm do
> > begin
> > for n := 1 to valeurn do
> > begin
> > for o := 1 to Length(chaine) do
> > begin
> > application.processmessages;
> > nombre := nombre + 1;
> > gauProgression.Progress := StrToInt(CurrToStr(round(nombre / multiple * 100)));
> > if marche <> True then
> > begin
> > break;
> > exit;
> > end;
> > test := substr(chaine[a] + chaine[b] + chaine[c] + chaine[d] + chaine[e] + chaine[f] + chaine[g] + chaine[h] + chaine[i] + chaine[j] + chaine[k] + chaine[l] + chaine[m] + chaine[n] + chaine[o],16-boucle,boucle);
> > if chkCasseurResultats.Checked then
> > begin
> > lblCasseurSortieChaineValeur.Caption := test;
> > lblCasseurSortieNombreValeur.Caption := IntToStr(nombre);
> > end;
> > if txtCasseurEntree.Text = chiffrement(test) then
> > begin
> > lblCasseurSortieChaineValeur.Caption := test;
> > lblCasseurSortieNombreValeur.Caption := IntToStr(nombre);
> > stabStatus.Panels[0].Text := 'Casseur : trouvé [' + test + ']';
> > lblCasseurSortieChaineValeur.Font.Color := clRed;
> > gauProgression.Progress := 100;
> > cmdCasseurDemarrer.Enabled := True;
> > cmdCasseurArreter.Enabled := False;
> > exit;
> > end;
> > test := '';
> > if o = Length(chaine) then
> > valeurn := Length(Chaine);
> > if n = Length(chaine) then
> > valeurm := Length(Chaine);
> > if m = Length(chaine) then
> > valeurl := Length(Chaine);
> > if l = Length(chaine) then
> > valeurk := Length(Chaine);
> > if k = Length(chaine) then
> > valeurj := Length(Chaine);
> > if j = Length(chaine) then
> > valeuri := Length(Chaine);
> > if i = Length(chaine) then
> > valeurh := Length(Chaine);
> > if h = Length(chaine) then
> > valeurg := Length(Chaine);
> > if g = Length(chaine) then
> > valeurf := Length(Chaine);
> > if f = Length(chaine) then
> > valeure := Length(Chaine);
> > if e = Length(chaine) then
> > valeurd := Length(Chaine);
> > if d = Length(chaine) then
> > valeurc := Length(Chaine);
> > if c = Length(chaine) then
> > valeurb := Length(Chaine);
> > if b = Length(chaine) then
> > valeura := Length(Chaine);
> > end;
> > end;
> > end;
> > end;
> > end;
> > end;
> > end;
> > end;
> > end;
> > end;
> > end;
> > end;
> > end;
> > end;
> > end;
> > if marche <> True then
> > begin
> > break;
> > exit;
> > end;
> > lblCasseurSortieChaineValeur.Caption := '- min. ' + IntToStr(boucle + 1) + ' caractères -';
> > end;
> > stabStatus.Panels[0].Text := 'Casseur : arrêté';
> > end;
> >
> > La fonction substr() employée est une sorte de reproduction que j'ai faite à partir de PHP, mais elle fonctionne de la même façon...
> >
> > Il y a-t-il quelque chose de frappant dans ce code ? Ce n'est que mon premier logiciel en Delphi 7... ;-)
> >
> > Bien à toi,
> >
> > Trash
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > >
> > >
> > > Tu reemploies les objets au fur et à mesure mais comment avec 256 Mo de RAM tu peux tout remplir ...
> > >
> > > Si tu as besoin d'un coup de main donne un peu plus d'explication sur ton algo et l'allocation de tes objets...
> > > Je pense que tu as besoin d'optimiser l'utilisation de tes objets!
> > >
> > > A+
> > > Sablor

> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > La méthode Free supprime l'objet concerné de la mémoire... Mais je réemploie tous les objets dans les boucles suivantes, je ne peux donc pas les supprimer...
> > > >
> > > > Je vais tester les logiciels que tu me proposes...
> > > >
> > > > Pour info technique, j'ai une barrette SDRAM PC-133 256Mo...
> > > >
> > > > Bien à toi,
> > > >
> > > > Trash
> > > >
> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > >
> > > > >
> > > > > Deja as tu verifier dans ta boucle que tu liberes bien la memoire des objets dont tu n'as plus besoin...Pour liberer la memoire des objets qui ne sont plus utilier il faut utiliser la fonction Free : MyObject.Free;
> > > > >
> > > > > Pour chercher a quel endroit tu a le probleme tu peux essayer avec MemCheck(unite a mettre et a configurer dans ton projet) ou bien avec le logiciel MemorySleuth de TurboPower, ou encore BoundChecker...
> > > > >
> > > > > C'est quand meme bizarre ton truc... Tu As combien de memoire???
> > > > >
> > > > >
> > > > > Sablor

> > > > >
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > > Bonjour,
> > > > > >
> > > > > > J'ai créé un programme qui exécute de très longues boucles... Seulement, après un certain temps d'exécution, un message EOutOfMemory ("Out of memory") apparait.
> > > > > >
> > > > > > Quelqu'un pourrait-il m'aider dans l'utilisation de la gestion de la mémoire utilisée ? Comment "vider" la mémoire que le logiciel a requis alors qu'elle n'est plus utilisée ? Et comment localiser la partie de la mémoire concernée ?
> > > > > >
> > > > > > Faut-il employer sysFreeMem ? Et comment ?
> > > > > >
> > > > > > Si quelqu'un a une info sur la gestion de la mémoire ou une éventuelle réponse à une de mes questions, cela m'intéresse !
> > > > > >
> > > > > > Merci ! ;-)
> > > > > >
> > > > > > Trash
> > > > >
> > > >
> > >
> >
>

mardi 22 juillet 2003 à 16:24:14 | Re : Gestion de la mémoire

sablor



As tu verifier les longueurs que peuvent faire tes string???
Sans la fonction de chiffrement je suis desole mais je pourrais pas debugguer ton code...
A+
Sablor



-------------------------------
Réponse au message :
-------------------------------

> Voici les fonctions manquantes :
>
> function exposant(Nombre: integer; Exposant: integer): integer;
> var
> i: integer;
> begin
> result := 1;
> for i := 0 to Exposant - 1 do
> result := result * Nombre;
> end;
>
> function substr(Chain: string; Place: integer; Longueur: integer): string;
> var
> i: integer;
> begin
> for i := Place + 1 to Place + Longueur do
> result := result + Chain[i-1];
> end;
>
> La fonction chiifrement(), quant à elle est le résultat de l'utilisation d'un composant qui contient les calculs nécessaires au chiffrement. Je ne pense pas que le problème vienne de là...
>
> Je vais essayer avec un try except, cela me semble être une bonne idée...
>
> Merci pour tes conseils... ;-)
>
> Bien à toi,
>
> Trash
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> >
> >
> > OK ton code a l'air OK mais comme il me manque les trois procedures exposant, substr, chiffrement je ne peux pas definir si il y a un probleme objet...
> > Si ton code se limite a ce que tu as indique alors je ne vois pas pourquoi tu as ce message...
> >
> > tu devrais peut etre essayer de mettre ton code dans un try except avec gestion de EOutOfMemory.
> > A+
> >
> > Sablor

> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Voici la partie de mon code source contenant les boucles qui posent problème... Cela te sera sûrement utile de savoir que c'est un programme de recherche brute force d'une chaine chiffrée (txtCasseurEntree)...
> > >
> > > var
> > > boucle: integer;
> > > a: integer;
> > > b: integer;
> > > c: integer;
> > > d: integer;
> > > e: integer;
> > > f: integer;
> > > g: integer;
> > > h: integer;
> > > i: integer;
> > > j: integer;
> > > k: integer;
> > > l: integer;
> > > m: integer;
> > > n: integer;
> > > o: integer;
> > > valeura: integer;
> > > valeurb: integer;
> > > valeurc: integer;
> > > valeurd: integer;
> > > valeure: integer;
> > > valeurf: integer;
> > > valeurg: integer;
> > > valeurh: integer;
> > > valeuri: integer;
> > > valeurj: integer;
> > > valeurk: integer;
> > > valeurl: integer;
> > > valeurm: integer;
> > > valeurn: integer;
> > > valeuro: integer;
> > > chaine: string;
> > > nombre: integer;
> > > caracteresMinuscules: string;
> > > caracteresMajuscules: string;
> > > caracteresNumeros: string;
> > > caracteresSpeciaux: string;
> > > multiple: integer;
> > > valu: integer;
> > > value: integer;
> > > test: string;
> > > begin
> > > if Length(txtCasseurEntree.Text) <> 32 then
> > > exit;
> > > marche := True;
> > > stabStatus.Panels[0].Text := 'Casseur : démarré';
> > > stabStatus.Refresh;
> > > cmdCasseurDemarrer.Enabled := False;
> > > cmdCasseurArreter.Enabled := True;
> > > lblCasseurSortieChaineValeur.Font.Color := clSilver;
> > > lblCasseurSortieChaineValeur.Caption := '';
> > > lblCasseurSortieNombreValeur.Caption := '';
> > > nombre := 0;
> > > if chkCasseurCaracteresMinuscules.Checked then
> > > caracteresMinuscules := 'abcdefghijklmnopqrstuvwxyzéèêëàù';
> > > if chkCasseurCaracteresMajuscules.Checked then
> > > caracteresMajuscules := 'ABCDEFGHIJKLMNOPQRSTUVWXYZÉÈÊËÀÙ';
> > > if chkCasseurCaracteresNumeros.Checked then
> > > caracteresNumeros := '1234567890';
> > > if chkCasseurCaracteresSpeciaux.Checked then
> > > caracteresSpeciaux := '³²&|@"#''(§^!{})°-_<>\?,;.:/=+~^s[$*]%Zµ£` ';
> > > chaine := caracteresMinuscules + caracteresMajuscules + caracteresNumeros + caracteresSpeciaux;
> > > valeura := 1;
> > > valeurb := 1;
> > > valeurc := 1;
> > > valeurd := 1;
> > > valeure := 1;
> > > valeurf := 1;
> > > valeurg := 1;
> > > valeurh := 1;
> > > valeuri := 1;
> > > valeurj := 1;
> > > valeurk := 1;
> > > valeurl := 1;
> > > valeurm := 1;
> > > valeurn := 1;
> > > for boucle := 1 to 15 do
> > > begin
> > > multiple := exposant(Length(chaine),boucle);
> > > gauProgression.Progress := 0;
> > > for a := 1 to valeura do
> > > begin
> > > for b := 1 to valeurb do
> > > begin
> > > for c := 1 to valeurc do
> > > begin
> > > for d := 1 to valeurd do
> > > begin
> > > for e := 1 to valeure do
> > > begin
> > > for f := 1 to valeurf do
> > > begin
> > > for g := 1 to valeurg do
> > > begin
> > > for h := 1 to valeurh do
> > > begin
> > > for i := 1 to valeuri do
> > > begin
> > > for j := 1 to valeurj do
> > > begin
> > > for k := 1 to valeurk do
> > > begin
> > > for l := 1 to valeurl do
> > > begin
> > > for m := 1 to valeurm do
> > > begin
> > > for n := 1 to valeurn do
> > > begin
> > > for o := 1 to Length(chaine) do
> > > begin
> > > application.processmessages;
> > > nombre := nombre + 1;
> > > gauProgression.Progress := StrToInt(CurrToStr(round(nombre / multiple * 100)));
> > > if marche <> True then
> > > begin
> > > break;
> > > exit;
> > > end;
> > > test := substr(chaine[a] + chaine[b] + chaine[c] + chaine[d] + chaine[e] + chaine[f] + chaine[g] + chaine[h] + chaine[i] + chaine[j] + chaine[k] + chaine[l] + chaine[m] + chaine[n] + chaine[o],16-boucle,boucle);
> > > if chkCasseurResultats.Checked then
> > > begin
> > > lblCasseurSortieChaineValeur.Caption := test;
> > > lblCasseurSortieNombreValeur.Caption := IntToStr(nombre);
> > > end;
> > > if txtCasseurEntree.Text = chiffrement(test) then
> > > begin
> > > lblCasseurSortieChaineValeur.Caption := test;
> > > lblCasseurSortieNombreValeur.Caption := IntToStr(nombre);
> > > stabStatus.Panels[0].Text := 'Casseur : trouvé [' + test + ']';
> > > lblCasseurSortieChaineValeur.Font.Color := clRed;
> > > gauProgression.Progress := 100;
> > > cmdCasseurDemarrer.Enabled := True;
> > > cmdCasseurArreter.Enabled := False;
> > > exit;
> > > end;
> > > test := '';
> > > if o = Length(chaine) then
> > > valeurn := Length(Chaine);
> > > if n = Length(chaine) then
> > > valeurm := Length(Chaine);
> > > if m = Length(chaine) then
> > > valeurl := Length(Chaine);
> > > if l = Length(chaine) then
> > > valeurk := Length(Chaine);
> > > if k = Length(chaine) then
> > > valeurj := Length(Chaine);
> > > if j = Length(chaine) then
> > > valeuri := Length(Chaine);
> > > if i = Length(chaine) then
> > > valeurh := Length(Chaine);
> > > if h = Length(chaine) then
> > > valeurg := Length(Chaine);
> > > if g = Length(chaine) then
> > > valeurf := Length(Chaine);
> > > if f = Length(chaine) then
> > > valeure := Length(Chaine);
> > > if e = Length(chaine) then
> > > valeurd := Length(Chaine);
> > > if d = Length(chaine) then
> > > valeurc := Length(Chaine);
> > > if c = Length(chaine) then
> > > valeurb := Length(Chaine);
> > > if b = Length(chaine) then
> > > valeura := Length(Chaine);
> > > end;
> > > end;
> > > end;
> > > end;
> > > end;
> > > end;
> > > end;
> > > end;
> > > end;
> > > end;
> > > end;
> > > end;
> > > end;
> > > end;
> > > end;
> > > if marche <> True then
> > > begin
> > > break;
> > > exit;
> > > end;
> > > lblCasseurSortieChaineValeur.Caption := '- min. ' + IntToStr(boucle + 1) + ' caractères -';
> > > end;
> > > stabStatus.Panels[0].Text := 'Casseur : arrêté';
> > > end;
> > >
> > > La fonction substr() employée est une sorte de reproduction que j'ai faite à partir de PHP, mais elle fonctionne de la même façon...
> > >
> > > Il y a-t-il quelque chose de frappant dans ce code ? Ce n'est que mon premier logiciel en Delphi 7... ;-)
> > >
> > > Bien à toi,
> > >
> > > Trash
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > >
> > > >
> > > > Tu reemploies les objets au fur et à mesure mais comment avec 256 Mo de RAM tu peux tout remplir ...
> > > >
> > > > Si tu as besoin d'un coup de main donne un peu plus d'explication sur ton algo et l'allocation de tes objets...
> > > > Je pense que tu as besoin d'optimiser l'utilisation de tes objets!
> > > >
> > > > A+
> > > > Sablor

> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > La méthode Free supprime l'objet concerné de la mémoire... Mais je réemploie tous les objets dans les boucles suivantes, je ne peux donc pas les supprimer...
> > > > >
> > > > > Je vais tester les logiciels que tu me proposes...
> > > > >
> > > > > Pour info technique, j'ai une barrette SDRAM PC-133 256Mo...
> > > > >
> > > > > Bien à toi,
> > > > >
> > > > > Trash
> > > > >
> > > > >
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > >
> > > > > >
> > > > > > Deja as tu verifier dans ta boucle que tu liberes bien la memoire des objets dont tu n'as plus besoin...Pour liberer la memoire des objets qui ne sont plus utilier il faut utiliser la fonction Free : MyObject.Free;
> > > > > >
> > > > > > Pour chercher a quel endroit tu a le probleme tu peux essayer avec MemCheck(unite a mettre et a configurer dans ton projet) ou bien avec le logiciel MemorySleuth de TurboPower, ou encore BoundChecker...
> > > > > >
> > > > > > C'est quand meme bizarre ton truc... Tu As combien de memoire???
> > > > > >
> > > > > >
> > > > > > Sablor

> > > > > >
> > > > > >
> > > > > > -------------------------------
> > > > > > Réponse au message :
> > > > > > -------------------------------
> > > > > >
> > > > > > > Bonjour,
> > > > > > >
> > > > > > > J'ai créé un programme qui exécute de très longues boucles... Seulement, après un certain temps d'exécution, un message EOutOfMemory ("Out of memory") apparait.
> > > > > > >
> > > > > > > Quelqu'un pourrait-il m'aider dans l'utilisation de la gestion de la mémoire utilisée ? Comment "vider" la mémoire que le logiciel a requis alors qu'elle n'est plus utilisée ? Et comment localiser la partie de la mémoire concernée ?
> > > > > > >
> > > > > > > Faut-il employer sysFreeMem ? Et comment ?
> > > > > > >
> > > > > > > Si quelqu'un a une info sur la gestion de la mémoire ou une éventuelle réponse à une de mes questions, cela m'intéresse !
> > > > > > >
> > > > > > > Merci ! ;-)
> > > > > > >
> > > > > > > Trash
> > > > > >
> > > > >
> > > >
> > >
> >
>

mercredi 23 juillet 2003 à 11:11:24 | Re : Gestion de la mémoire

Emandhal

je vais peut-etre dire une betise, mais je pense ke c à cause de tes for... il doit y en avoir trop
à voir kom ca ton code peut etre mieux optimisé

Tout problème a sa solution... Mais en général, c'est jamais la bonne...

mercredi 23 juillet 2003 à 17:14:57 | Re : Gestion de la mémoire

jmp77

Membre Club
Hello,

Comme dis par Emandhal je pense que tout vient d'un problème d'optimisation. Si tu veux vraiment que l'on puisse t'aider envoie nous carrément les sources complètes que l'on puisse le lancer et te dire comment arranger tout ça.

Bonne prog,
jmp.



-------------------------------
Réponse au message :
-------------------------------

>
>
> As tu verifier les longueurs que peuvent faire tes string???
> Sans la fonction de chiffrement je suis desole mais je pourrais pas debugguer ton code...
> A+
> Sablor

>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Voici les fonctions manquantes :
> >
> > function exposant(Nombre: integer; Exposant: integer): integer;
> > var
> > i: integer;
> > begin
> > result := 1;
> > for i := 0 to Exposant - 1 do
> > result := result * Nombre;
> > end;
> >
> > function substr(Chain: string; Place: integer; Longueur: integer): string;
> > var
> > i: integer;
> > begin
> > for i := Place + 1 to Place + Longueur do
> > result := result + Chain[i-1];
> > end;
> >
> > La fonction chiifrement(), quant à elle est le résultat de l'utilisation d'un composant qui contient les calculs nécessaires au chiffrement. Je ne pense pas que le problème vienne de là...
> >
> > Je vais essayer avec un try except, cela me semble être une bonne idée...
> >
> > Merci pour tes conseils... ;-)
> >
> > Bien à toi,
> >
> > Trash
> >
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > >
> > >
> > > OK ton code a l'air OK mais comme il me manque les trois procedures exposant, substr, chiffrement je ne peux pas definir si il y a un probleme objet...
> > > Si ton code se limite a ce que tu as indique alors je ne vois pas pourquoi tu as ce message...
> > >
> > > tu devrais peut etre essayer de mettre ton code dans un try except avec gestion de EOutOfMemory.
> > > A+
> > >
> > > Sablor

> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Voici la partie de mon code source contenant les boucles qui posent problème... Cela te sera sûrement utile de savoir que c'est un programme de recherche brute force d'une chaine chiffrée (txtCasseurEntree)...
> > > >
> > > > var
> > > > boucle: integer;
> > > > a: integer;
> > > > b: integer;
> > > > c: integer;
> > > > d: integer;
> > > > e: integer;
> > > > f: integer;
> > > > g: integer;
> > > > h: integer;
> > > > i: integer;
> > > > j: integer;
> > > > k: integer;
> > > > l: integer;
> > > > m: integer;
> > > > n: integer;
> > > > o: integer;
> > > > valeura: integer;
> > > > valeurb: integer;
> > > > valeurc: integer;
> > > > valeurd: integer;
> > > > valeure: integer;
> > > > valeurf: integer;
> > > > valeurg: integer;
> > > > valeurh: integer;
> > > > valeuri: integer;
> > > > valeurj: integer;
> > > > valeurk: integer;
> > > > valeurl: integer;
> > > > valeurm: integer;
> > > > valeurn: integer;
> > > > valeuro: integer;
> > > > chaine: string;
> > > > nombre: integer;
> > > > caracteresMinuscules: string;
> > > > caracteresMajuscules: string;
> > > > caracteresNumeros: string;
> > > > caracteresSpeciaux: string;
> > > > multiple: integer;
> > > > valu: integer;
> > > > value: integer;
> > > > test: string;
> > > > begin
> > > > if Length(txtCasseurEntree.Text) <> 32 then
> > > > exit;
> > > > marche := True;
> > > > stabStatus.Panels[0].Text := 'Casseur : démarré';
> > > > stabStatus.Refresh;
> > > > cmdCasseurDemarrer.Enabled := False;
> > > > cmdCasseurArreter.Enabled := True;
> > > > lblCasseurSortieChaineValeur.Font.Color := clSilver;
> > > > lblCasseurSortieChaineValeur.Caption := '';
> > > > lblCasseurSortieNombreValeur.Caption := '';
> > > > nombre := 0;
> > > > if chkCasseurCaracteresMinuscules.Checked then
> > > > caracteresMinuscules := 'abcdefghijklmnopqrstuvwxyzéèêëàù';
> > > > if chkCasseurCaracteresMajuscules.Checked then
> > > > caracteresMajuscules := 'ABCDEFGHIJKLMNOPQRSTUVWXYZÉÈÊËÀÙ';
> > > > if chkCasseurCaracteresNumeros.Checked then
> > > > caracteresNumeros := '1234567890';
> > > > if chkCasseurCaracteresSpeciaux.Checked then
> > > > caracteresSpeciaux := '³²&|@"#''(§^!{})°-_<>\?,;.:/=+~^s[$*]%Zµ£` ';
> > > > chaine := caracteresMinuscules + caracteresMajuscules + caracteresNumeros + caracteresSpeciaux;
> > > > valeura := 1;
> > > > valeurb := 1;
> > > > valeurc := 1;
> > > > valeurd := 1;
> > > > valeure := 1;
> > > > valeurf := 1;
> > > > valeurg := 1;
> > > > valeurh := 1;
> > > > valeuri := 1;
> > > > valeurj := 1;
> > > > valeurk := 1;
> > > > valeurl := 1;
> > > > valeurm := 1;
> > > > valeurn := 1;
> > > > for boucle := 1 to 15 do
> > > > begin
> > > > multiple := exposant(Length(chaine),boucle);
> > > > gauProgression.Progress := 0;
> > > > for a := 1 to valeura do
> > > > begin
> > > > for b := 1 to valeurb do
> > > > begin
> > > > for c := 1 to valeurc do
> > > > begin
> > > > for d := 1 to valeurd do
> > > > begin
> > > > for e := 1 to valeure do
> > > > begin
> > > > for f := 1 to valeurf do
> > > > begin
> > > > for g := 1 to valeurg do
> > > > begin
> > > > for h := 1 to valeurh do
> > > > begin
> > > > for i := 1 to valeuri do
> > > > begin
> > > > for j := 1 to valeurj do
> > > > begin
> > > > for k := 1 to valeurk do
> > > > begin
> > > > for l := 1 to valeurl do
> > > > begin
> > > > for m := 1 to valeurm do
> > > > begin
> > > > for n := 1 to valeurn do
> > > > begin
> > > > for o := 1 to Length(chaine) do
> > > > begin
> > > > application.processmessages;
> > > > nombre := nombre + 1;
> > > > gauProgression.Progress := StrToInt(CurrToStr(round(nombre / multiple * 100)));
> > > > if marche <> True then
> > > > begin
> > > > break;
> > > > exit;
> > > > end;
> > > > test := substr(chaine[a] + chaine[b] + chaine[c] + chaine[d] + chaine[e] + chaine[f] + chaine[g] + chaine[h] + chaine[i] + chaine[j] + chaine[k] + chaine[l] + chaine[m] + chaine[n] + chaine[o],16-boucle,boucle);
> > > > if chkCasseurResultats.Checked then
> > > > begin
> > > > lblCasseurSortieChaineValeur.Caption := test;
> > > > lblCasseurSortieNombreValeur.Caption := IntToStr(nombre);
> > > > end;
> > > > if txtCasseurEntree.Text = chiffrement(test) then
> > > > begin
> > > > lblCasseurSortieChaineValeur.Caption := test;
> > > > lblCasseurSortieNombreValeur.Caption := IntToStr(nombre);
> > > > stabStatus.Panels[0].Text := 'Casseur : trouvé [' + test + ']';
> > > > lblCasseurSortieChaineValeur.Font.Color := clRed;
> > > > gauProgression.Progress := 100;
> > > > cmdCasseurDemarrer.Enabled := True;
> > > > cmdCasseurArreter.Enabled := False;
> > > > exit;
> > > > end;
> > > > test := '';
> > > > if o = Length(chaine) then
> > > > valeurn := Length(Chaine);
> > > > if n = Length(chaine) then
> > > > valeurm := Length(Chaine);
> > > > if m = Length(chaine) then
> > > > valeurl := Length(Chaine);
> > > > if l = Length(chaine) then
> > > > valeurk := Length(Chaine);
> > > > if k = Length(chaine) then
> > > > valeurj := Length(Chaine);
> > > > if j = Length(chaine) then
> > > > valeuri := Length(Chaine);
> > > > if i = Length(chaine) then
> > > > valeurh := Length(Chaine);
> > > > if h = Length(chaine) then
> > > > valeurg := Length(Chaine);
> > > > if g = Length(chaine) then
> > > > valeurf := Length(Chaine);
> > > > if f = Length(chaine) then
> > > > valeure := Length(Chaine);
> > > > if e = Length(chaine) then
> > > > valeurd := Length(Chaine);
> > > > if d = Length(chaine) then
> > > > valeurc := Length(Chaine);
> > > > if c = Length(chaine) then
> > > > valeurb := Length(Chaine);
> > > > if b = Length(chaine) then
> > > > valeura := Length(Chaine);
> > > > end;
> > > > end;
> > > > end;
> > > > end;
> > > > end;
> > > > end;
> > > > end;
> > > > end;
> > > > end;
> > > > end;
> > > > end;
> > > > end;
> > > > end;
> > > > end;
> > > > end;
> > > > if marche <> True then
> > > > begin
> > > > break;
> > > > exit;
> > > > end;
> > > > lblCasseurSortieChaineValeur.Caption := '- min. ' + IntToStr(boucle + 1) + ' caractères -';
> > > > end;
> > > > stabStatus.Panels[0].Text := 'Casseur : arrêté';
> > > > end;
> > > >
> > > > La fonction substr() employée est une sorte de reproduction que j'ai faite à partir de PHP, mais elle fonctionne de la même façon...
> > > >
> > > > Il y a-t-il quelque chose de frappant dans ce code ? Ce n'est que mon premier logiciel en Delphi 7... ;-)
> > > >
> > > > Bien à toi,
> > > >
> > > > Trash
> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > >
> > > > >
> > > > > Tu reemploies les objets au fur et à mesure mais comment avec 256 Mo de RAM tu peux tout remplir ...
> > > > >
> > > > > Si tu as besoin d'un coup de main donne un peu plus d'explication sur ton algo et l'allocation de tes objets...
> > > > > Je pense que tu as besoin d'optimiser l'utilisation de tes objets!
> > > > >
> > > > > A+
> > > > > Sablor

> > > > >
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > > La méthode Free supprime l'objet concerné de la mémoire... Mais je réemploie tous les objets dans les boucles suivantes, je ne peux donc pas les supprimer...
> > > > > >
> > > > > > Je vais tester les logiciels que tu me proposes...
> > > > > >
> > > > > > Pour info technique, j'ai une barrette SDRAM PC-133 256Mo...
> > > > > >
> > > > > > Bien à toi,
> > > > > >
> > > > > > Trash
> > > > > >
> > > > > >
> > > > > >
> > > > > > -------------------------------
> > > > > > Réponse au message :
> > > > > > -------------------------------
> > > > > >
> > > > > > >
> > > > > > >
> > > > > > > Deja as tu verifier dans ta boucle que tu liberes bien la memoire des objets dont tu n'as plus besoin...Pour liberer la memoire des objets qui ne sont plus utilier il faut utiliser la fonction Free : MyObject.Free;
> > > > > > >
> > > > > > > Pour chercher a quel endroit tu a le probleme tu peux essayer avec MemCheck(unite a mettre et a configurer dans ton projet) ou bien avec le logiciel MemorySleuth de TurboPower, ou encore BoundChecker...
> > > > > > >
> > > > > > > C'est quand meme bizarre ton truc... Tu As combien de memoire???
> > > > > > >
> > > > > > >
> > > > > > > Sablor

> > > > > > >
> > > > > > >
> > > > > > > -------------------------------
> > > > > > > Réponse au message :
> > > > > > > -------------------------------
> > > > > > >
> > > > > > > > Bonjour,
> > > > > > > >
> > > > > > > > J'ai créé un programme qui exécute de très longues boucles... Seulement, après un certain temps d'exécution, un message EOutOfMemory ("Out of memory") apparait.
> > > > > > > >
> > > > > > > > Quelqu'un pourrait-il m'aider dans l'utilisation de la gestion de la mémoire utilisée ? Comment "vider" la mémoire que le logiciel a requis alors qu'elle n'est plus utilisée ? Et comment localiser la partie de la mémoire concernée ?
> > > > > > > >
> > > > > > > > Faut-il employer sysFreeMem ? Et comment ?
> > > > > > > >
> > > > > > > > Si quelqu'un a une info sur la gestion de la mémoire ou une éventuelle réponse à une de mes questions, cela m'intéresse !
> > > > > > > >
> > > > > > > > Merci ! ;-)
> > > > > > > >
> > > > > > > > Trash
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>


1 2

Cette discussion est classé dans : gestion, quelqu, mémoire, utilisée


Répondre à ce message

Sujets en rapport avec ce message

%CPU utilisé et Mémoire utilisée par process [ par kinay ] J'aimerais savoir quelle API Windows je peux utiliser afin de récupérer le pourcentage de CPU utilisé et la mémoire utilisée pour chaque process (Comm Gestion mémoire [ par jmp77 ] Bonjour à tous et toutes,Voilà mon problème est que lorsque je regarde dans le gestionnaire des taches je vois mon application qui au fur à mesure de Service Windows - Gestion de la mémoire [ par madcap ] Bonjour à tous,J'ai développé un service Windows en Delphi qui interroge un WS chaque X temps pour récupérer des données et les insérer dans une base Mettre un TBitmap en mémoire [ par Matware456 ] Bonjour, Comme le titre l'indique j'aimerais placer un TBitmap en mémoire, c'est à dire le placer entièrement dans la RAM pour pouvoir le réutiliser d import WSDL et Delphi .Net ?? [ par aya8619 ] Bonjour,est ce que quelqu'un sait si c'est possible importer des fichiers WSDL dans un application VLC .Net et sinon parquoi ça été remplacer ? (j'ai Ecrasement de mémoire [ par drolimi ] Je soupçonne fortement qu'une ressource de mon programme est libérée à tort plusieurs fois et que cela cause un écrasement de mémoire. Y-a-til un moye Gestion d'erreur de connexion [ par josserand ] Bonjour tlm !!Quand je souhaite me connecter à un serveur SMTP(NMSMTP1.Connect)et que la connexion échoue, ça plante !Pourtant j'ai essayé d'utiliser Processus... [ par neodelphi ] Bonjour tout le monde, je souhaiterai sous Delphi7 surveiller la mémoire occupée par un programme en temps réel... A vrai dire je suis bloqué, j'ai re Gestion des mémos [ par adjena ] J'aimerais savoir comment je peux limiter un champ mémo à 10 lignes de 30 caractères car la limitation du mémo à 300 caractères permet à l'utilisateur cherche examples de logiciel de gestion comercial sous delphi [ par Fico75 ] salut bonjour à tousj'aimerais avoir des examples de code delphi sur comment on fait un logiciel de gestion commercial avec bases de données ect... et


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.