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
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
exemple de code source pour la gestion des lcd 2*16 caractère [ par lagrangienci ]
bjr je suis un debutant en programmation j'ai un projet de fin de cycle qui consiste à gerer un ecran lcd 2*16 caratère commandé par un microcontroleu
codesoft8 et Font download (polices dans mémoire imprimante ZEBRA) [ par genelacroix ]
Bonjour, j'ai fait appel à Teklynx (codesoft8) mais pas de nouvelles. En fait, dans leur logiciel Font downloader qui permet de télécharger en mémoir
Gestion de stock et de personnel en delphi7 [ par mariaerrfig21 ]
salam,bonsoir est ce que tt le monde ici va bien?,svp jai besoin de votre aide pour realiser une application de gestion de personnel et une autre de
la mémoire d'une application delphi augmente sans cesse [ par JBIER ]
Bonjour, Quelqu'un peut-il me renseigner sur une question qui me chagrine vraiment ? J'ai créé un '.exe' avec delphi (delphi 6 et Delphi 2009) qui
Livres en rapport
|
Derniers Blogs
[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA par cyril
Le deuxième keynote du mix fut très riche en contenu. Internet Explorer 9 Juste un après le lancement de Internet Explorer 8, Microsoft a dévoilé les nouveautés de Internet Explorer 9. Désormais, IE supportera HTML5, SVG et CSS3. L'élément ...
Cliquez pour lire la suite de l'article par cyril CERTIFICATIONS BETA .NET 4CERTIFICATIONS BETA .NET 4 par KooKiz
Les inscriptions pour les certifications beta .NET 4 ont commencé. L'inscription est offerte pour les examens suivants : - 71-511, TS: Windows Applications Development with Microsoft .NET Framework 4 - 71-515, TS: Web Applications Development with...
Cliquez pour lire la suite de l'article par KooKiz [MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2[MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2 par redo
J'imagine que la plupart d'entre vous connaissent bien et utilisent le service de traduction de Google, mais connaissez-vous celui de Microsoft . Microsoft Translator ? Effectivement, Microsoft nous annoncé le lancement version 2 de la Technologie Preview...
Cliquez pour lire la suite de l'article par redo LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010!LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010! par MPOWARE
Toutes les vidéos de ce lancement sont en ligne!
Partie I - Intro
http://www.youtube.com/watch?v=LkQzTQ8T6CA
Partie II - Démo 1
http://www.youtube.com/watch?v=drAhYQ7lqvo
Partie III - Démo 2
http://www.youtube.com/watch?v=c8KM_1Gqybc...
Cliquez pour lire la suite de l'article par MPOWARE [WP7] JE NE VEUX PAS D'UN NOUVEL IPHONE[WP7] JE NE VEUX PAS D'UN NOUVEL IPHONE par FREMYCOMPANY
Je pense qu'ils ont besoin d'une piqure de rappel chez Microsoft : c'est bien gentil d'avoir une interface jolie, mais si c'est pour avoir un truc qui ne convainct pas dedans, c'est peine perdue.
---->
Système ouvert ----> Fermé ?
P...
Cliquez pour lire la suite de l'article par FREMYCOMPANY
Logiciels
Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods Konvertor (4.00)KONVERTOR (4.00)Le logiciel est un gestionnaire multimedia affichant, jouant et convertissant plus de 2000 format... Cliquez pour télécharger Konvertor
|