Accueil > Forum > > > > Gestion de la mémoire
Gestion de la mémoire
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
|
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 > > > > > > > > > > > > > > > > > > > > > > > > > > > >
|
|
Cette discussion est classée dans : gestion, quelqu, mémoire, utilisée
Répondre à ce message
Livres en rapport
|
Derniers Blogs
[SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|