Je voudrais détruire un objet une fois celui-ci utilisé afin de
libérer de la mémoire et continuer mon script (j'ai pour l'instant
700 Mo de RAM utilisés pour 750 dispo, je stocke de gros fichiers
texte).
Je voudrais détruire un objet une fois celui-ci utilisé afin de
libérer de la mémoire et continuer mon script (j'ai pour l'instant
700 Mo de RAM utilisés pour 750 dispo, je stocke de gros fichiers
texte).
Je voudrais détruire un objet une fois celui-ci utilisé afin de
libérer de la mémoire et continuer mon script (j'ai pour l'instant
700 Mo de RAM utilisés pour 750 dispo, je stocke de gros fichiers
texte).
Bonjour à tous et meilleurs voeux pour 2006 (la santé surtout) !
J'ai créé un script objet en m'aidant de didacticiels en référence
sur le forum et j'ai un petit problème concernant la destruction
d'objet.
J'ai créé une classe dont le constructeur est du sytle $self > {'array1' = [], 'array2' = [], 'hash1' = {} ...}
Dans les didacticiels il est donc indiqué qu'on peut utiliser une
classe DESTROY qui n'est utilisée qu'en fin de programme.
Je voudrais détruire un objet une fois celui-ci utilisé afin de
libérer de la mémoire et continuer mon script (j'ai pour l'instant
700 Mo de RAM utilisés pour 750 dispo, je stocke de gros fichiers
texte).
J'ai tenté de réinitialisé mes valeurs en réaffectant $self > {'array1' = [], 'array2' = [], 'hash1' = {} ...} et en vérifiant
l'état en créant un boucle while (1 == 1) {} mais j'ai toujours 700
Mo occupés.
Merci beaucoup si vous pouvez m'aider, c'est assez urgent et pour le
boulot :-)
Bonjour à tous et meilleurs voeux pour 2006 (la santé surtout) !
J'ai créé un script objet en m'aidant de didacticiels en référence
sur le forum et j'ai un petit problème concernant la destruction
d'objet.
J'ai créé une classe dont le constructeur est du sytle $self > {'array1' = [], 'array2' = [], 'hash1' = {} ...}
Dans les didacticiels il est donc indiqué qu'on peut utiliser une
classe DESTROY qui n'est utilisée qu'en fin de programme.
Je voudrais détruire un objet une fois celui-ci utilisé afin de
libérer de la mémoire et continuer mon script (j'ai pour l'instant
700 Mo de RAM utilisés pour 750 dispo, je stocke de gros fichiers
texte).
J'ai tenté de réinitialisé mes valeurs en réaffectant $self > {'array1' = [], 'array2' = [], 'hash1' = {} ...} et en vérifiant
l'état en créant un boucle while (1 == 1) {} mais j'ai toujours 700
Mo occupés.
Merci beaucoup si vous pouvez m'aider, c'est assez urgent et pour le
boulot :-)
Bonjour à tous et meilleurs voeux pour 2006 (la santé surtout) !
J'ai créé un script objet en m'aidant de didacticiels en référence
sur le forum et j'ai un petit problème concernant la destruction
d'objet.
J'ai créé une classe dont le constructeur est du sytle $self > {'array1' = [], 'array2' = [], 'hash1' = {} ...}
Dans les didacticiels il est donc indiqué qu'on peut utiliser une
classe DESTROY qui n'est utilisée qu'en fin de programme.
Je voudrais détruire un objet une fois celui-ci utilisé afin de
libérer de la mémoire et continuer mon script (j'ai pour l'instant
700 Mo de RAM utilisés pour 750 dispo, je stocke de gros fichiers
texte).
J'ai tenté de réinitialisé mes valeurs en réaffectant $self > {'array1' = [], 'array2' = [], 'hash1' = {} ...} et en vérifiant
l'état en créant un boucle while (1 == 1) {} mais j'ai toujours 700
Mo occupés.
Merci beaucoup si vous pouvez m'aider, c'est assez urgent et pour le
boulot :-)
D'après ce que vous me dites, si j'appelle un ou plusieurs package(s)
situé(s) dans un .pm depuis un script .pl, les objets seront détruits
et la mémoire libérée à la fin du script ?
Dans ce cas, à part utiliser 2 scripts pour un traitement, il n'y a
pas moyen de libéré la mémoire, même si l'utilisateur sais qu'à
telle étape du script les objets précédemment créés ne servent
plus ?
D'après ce que vous me dites, si j'appelle un ou plusieurs package(s)
situé(s) dans un .pm depuis un script .pl, les objets seront détruits
et la mémoire libérée à la fin du script ?
Dans ce cas, à part utiliser 2 scripts pour un traitement, il n'y a
pas moyen de libéré la mémoire, même si l'utilisateur sais qu'à
telle étape du script les objets précédemment créés ne servent
plus ?
D'après ce que vous me dites, si j'appelle un ou plusieurs package(s)
situé(s) dans un .pm depuis un script .pl, les objets seront détruits
et la mémoire libérée à la fin du script ?
Dans ce cas, à part utiliser 2 scripts pour un traitement, il n'y a
pas moyen de libéré la mémoire, même si l'utilisateur sais qu'à
telle étape du script les objets précédemment créés ne servent
plus ?
Un script Perl demande de la mémoire au système au fur et à mesure de
ses besoins. Mais perl ne rend jamais cette mémoire au système... sauf
lorsque le script se termine. La mémoire utilisée n'est donc jamais
"libérée".
En résumé, la mémoire libérée par perl n'est réutilisable que par perl
tant que le script n'est pas terminé. perl n'est pas le seul dans ce
cas : la plupart de softs fonctionnent comme cela.
Un script Perl demande de la mémoire au système au fur et à mesure de
ses besoins. Mais perl ne rend jamais cette mémoire au système... sauf
lorsque le script se termine. La mémoire utilisée n'est donc jamais
"libérée".
En résumé, la mémoire libérée par perl n'est réutilisable que par perl
tant que le script n'est pas terminé. perl n'est pas le seul dans ce
cas : la plupart de softs fonctionnent comme cela.
Un script Perl demande de la mémoire au système au fur et à mesure de
ses besoins. Mais perl ne rend jamais cette mémoire au système... sauf
lorsque le script se termine. La mémoire utilisée n'est donc jamais
"libérée".
En résumé, la mémoire libérée par perl n'est réutilisable que par perl
tant que le script n'est pas terminé. perl n'est pas le seul dans ce
cas : la plupart de softs fonctionnent comme cela.
Un script Perl demande de la mémoire au système au fur et à mesure de
ses besoins. Mais perl ne rend jamais cette mémoire au système... sauf
lorsque le script se termine. La mémoire utilisée n'est donc jamais
"libérée".
En résumé, la mémoire libérée par perl n'est réutilisable que par
perl
tant que le script n'est pas terminé. perl n'est pas le seul dans ce
cas : la plupart de softs fonctionnent comme cela.
35 ans après qu'un langage comme PL/I ait permis des allocations et
libérations hiérarchisées avec ses notions d'offset de d'area, c'est
tout de même malheureux que la technique ait rétrogradé à ce
point... :-(
Un script Perl demande de la mémoire au système au fur et à mesure de
ses besoins. Mais perl ne rend jamais cette mémoire au système... sauf
lorsque le script se termine. La mémoire utilisée n'est donc jamais
"libérée".
En résumé, la mémoire libérée par perl n'est réutilisable que par
perl
tant que le script n'est pas terminé. perl n'est pas le seul dans ce
cas : la plupart de softs fonctionnent comme cela.
35 ans après qu'un langage comme PL/I ait permis des allocations et
libérations hiérarchisées avec ses notions d'offset de d'area, c'est
tout de même malheureux que la technique ait rétrogradé à ce
point... :-(
Un script Perl demande de la mémoire au système au fur et à mesure de
ses besoins. Mais perl ne rend jamais cette mémoire au système... sauf
lorsque le script se termine. La mémoire utilisée n'est donc jamais
"libérée".
En résumé, la mémoire libérée par perl n'est réutilisable que par
perl
tant que le script n'est pas terminé. perl n'est pas le seul dans ce
cas : la plupart de softs fonctionnent comme cela.
35 ans après qu'un langage comme PL/I ait permis des allocations et
libérations hiérarchisées avec ses notions d'offset de d'area, c'est
tout de même malheureux que la technique ait rétrogradé à ce
point... :-(
Ce n'est pas Perl (le langage) qui est en cause mais perl (l'une de
ses implémentations actuelles).
PL/I seul ne peut rien faire de mieux car pour que ça marche, il faut
évidemment la participation du système (qui doit pouvoir récupérer la
mémoire libéré). Certains systèmes ne permett(ai)ent tout simplement
pas de rendre la mémoire.
Avec l'avénement de la mémoire virtuelle dans la quasi totalité de OS
*et* des processeurs, ce problème n'en est souvent plus un (sauf dans
le cas de softs serveurs destinés à tourner très longtemps).
La fable habituelle :
- Le concepteur du langage C disait "la gestion de l'allocation
mémoire est une chose tellement importante qu'on ne peut la laisser au
système".
- Le concepteur du langage Lisp disait "la gestion de l'allocation
mémoire est une chose tellement importante qu'on ne peut pas la
laisser au programmeur".
Ce n'est pas Perl (le langage) qui est en cause mais perl (l'une de
ses implémentations actuelles).
PL/I seul ne peut rien faire de mieux car pour que ça marche, il faut
évidemment la participation du système (qui doit pouvoir récupérer la
mémoire libéré). Certains systèmes ne permett(ai)ent tout simplement
pas de rendre la mémoire.
Avec l'avénement de la mémoire virtuelle dans la quasi totalité de OS
*et* des processeurs, ce problème n'en est souvent plus un (sauf dans
le cas de softs serveurs destinés à tourner très longtemps).
La fable habituelle :
- Le concepteur du langage C disait "la gestion de l'allocation
mémoire est une chose tellement importante qu'on ne peut la laisser au
système".
- Le concepteur du langage Lisp disait "la gestion de l'allocation
mémoire est une chose tellement importante qu'on ne peut pas la
laisser au programmeur".
Ce n'est pas Perl (le langage) qui est en cause mais perl (l'une de
ses implémentations actuelles).
PL/I seul ne peut rien faire de mieux car pour que ça marche, il faut
évidemment la participation du système (qui doit pouvoir récupérer la
mémoire libéré). Certains systèmes ne permett(ai)ent tout simplement
pas de rendre la mémoire.
Avec l'avénement de la mémoire virtuelle dans la quasi totalité de OS
*et* des processeurs, ce problème n'en est souvent plus un (sauf dans
le cas de softs serveurs destinés à tourner très longtemps).
La fable habituelle :
- Le concepteur du langage C disait "la gestion de l'allocation
mémoire est une chose tellement importante qu'on ne peut la laisser au
système".
- Le concepteur du langage Lisp disait "la gestion de l'allocation
mémoire est une chose tellement importante qu'on ne peut pas la
laisser au programmeur".
J'avoue ne pas comprendre. Tu utilises encore la mémoire virtuelle,
toi? Cela fait deux ans que j'ai inhibée la mienne aussi bien sous
Windows que sous Linux : pagespace à 0, swap space à 0 (l'installation
t'avertit d'un message, mais te donne le droit de passer outre) : à
quoi me servirait-il d'avoir une machine avec un p-rating équivalant à
3,8 millions d'opérations par seconde si, même une fois tous les dix
millions d'opérations, je dois attendre 8ms un appel disque ? Je
préfère carrément que le système se bloque sur un "Memory full" et
aller acheter une barrette mémoire de plus au revendeur du coin.
De toute façon, si les échanges disque commencent, tout rame tellement
que tu es obligé d'arrêter le traitement toi-même... Ce ne sont tout
simplement pas les mêmes ordres de gradeur qui sont en présence. Et
aujourd'hui moins que jamais.
J'avoue ne pas comprendre. Tu utilises encore la mémoire virtuelle,
toi? Cela fait deux ans que j'ai inhibée la mienne aussi bien sous
Windows que sous Linux : pagespace à 0, swap space à 0 (l'installation
t'avertit d'un message, mais te donne le droit de passer outre) : à
quoi me servirait-il d'avoir une machine avec un p-rating équivalant à
3,8 millions d'opérations par seconde si, même une fois tous les dix
millions d'opérations, je dois attendre 8ms un appel disque ? Je
préfère carrément que le système se bloque sur un "Memory full" et
aller acheter une barrette mémoire de plus au revendeur du coin.
De toute façon, si les échanges disque commencent, tout rame tellement
que tu es obligé d'arrêter le traitement toi-même... Ce ne sont tout
simplement pas les mêmes ordres de gradeur qui sont en présence. Et
aujourd'hui moins que jamais.
J'avoue ne pas comprendre. Tu utilises encore la mémoire virtuelle,
toi? Cela fait deux ans que j'ai inhibée la mienne aussi bien sous
Windows que sous Linux : pagespace à 0, swap space à 0 (l'installation
t'avertit d'un message, mais te donne le droit de passer outre) : à
quoi me servirait-il d'avoir une machine avec un p-rating équivalant à
3,8 millions d'opérations par seconde si, même une fois tous les dix
millions d'opérations, je dois attendre 8ms un appel disque ? Je
préfère carrément que le système se bloque sur un "Memory full" et
aller acheter une barrette mémoire de plus au revendeur du coin.
De toute façon, si les échanges disque commencent, tout rame tellement
que tu es obligé d'arrêter le traitement toi-même... Ce ne sont tout
simplement pas les mêmes ordres de gradeur qui sont en présence. Et
aujourd'hui moins que jamais.
[...] Je préfère carrément que le système se bloque sur un "Memory
full" et aller acheter une barrette mémoire de plus au revendeur du
coin.
[...] Je préfère carrément que le système se bloque sur un "Memory
full" et aller acheter une barrette mémoire de plus au revendeur du
coin.
[...] Je préfère carrément que le système se bloque sur un "Memory
full" et aller acheter une barrette mémoire de plus au revendeur du
coin.
Juste pour cette question : je préfère que le système ralentisse
momentanément plutôt que de ne pas pouvoir exécuter la tâche
ultra-importante que je dois justement terminer tout de suite pour
quelques ko manquant occupés par des tâches moins
prioritaires... alors que ce besoin de surplus assuré par un peu de
swap ne durera que quelques secondes ou minutes. Évidemment si cela
doit durer plus longtemps, c'est qu'il est temps d'acheter soit de la
mémoire soit un autre ordinateur ;-)
Ceci étant... On s'éloigne de plus en plus de Perl ;-)
Juste pour cette question : je préfère que le système ralentisse
momentanément plutôt que de ne pas pouvoir exécuter la tâche
ultra-importante que je dois justement terminer tout de suite pour
quelques ko manquant occupés par des tâches moins
prioritaires... alors que ce besoin de surplus assuré par un peu de
swap ne durera que quelques secondes ou minutes. Évidemment si cela
doit durer plus longtemps, c'est qu'il est temps d'acheter soit de la
mémoire soit un autre ordinateur ;-)
Ceci étant... On s'éloigne de plus en plus de Perl ;-)
Juste pour cette question : je préfère que le système ralentisse
momentanément plutôt que de ne pas pouvoir exécuter la tâche
ultra-importante que je dois justement terminer tout de suite pour
quelques ko manquant occupés par des tâches moins
prioritaires... alors que ce besoin de surplus assuré par un peu de
swap ne durera que quelques secondes ou minutes. Évidemment si cela
doit durer plus longtemps, c'est qu'il est temps d'acheter soit de la
mémoire soit un autre ordinateur ;-)
Ceci étant... On s'éloigne de plus en plus de Perl ;-)