Hello,
J'ai fait un petit test sur la gestion de la mémoire d'active Perl, d'Indigo Perl, et du perl de Siemens, tout ca sous Windows (win2000)
Code :
- print "Hello.\n";
- sleep 5;
- print "filling...";
- for ($i=0;$i<1000000;$i++) {
- $a .= "aaaaaaaaaa";
- }
- print "done\n";
- sleep 5;
- print "release memory!\n";
- undef($a);
- sleep 5;
- print "bye.";
|
En gros le truc fait une (longue) boucle pour remplir doucement une variable avec 10 000 000 caracteres (10mo environ)
j'ai mis des sleep pour pouvoir constater l'occupation de la memoire avec le gestionnaire de taches
alors voila les resultat que j'ai pu obtenir avec un PII 350 et 128mo de ram:
ActivePerl: il met 2 ou 3 secondes pour faire la boucle, mais il fini par occuper 30mo (!!), qu'il ne rend pas au moment du undef.
IndigoPerl: idem Active perl (c le meme on dirait!)
Siemens (binary trouvé sur perl.org il me semble):
il met 2 (!!!) minutes pour faire la boucle, mais il n'occupe que 10mo (normal koi, et il rend la memoire au moent du undef
en remplissant la variables par plus gros bout, la vitesse devient plus comparable. Je pense que la difference de vitesse ne doit pas trop se faire sentir dans uen vraie application, mais la memoire est vraiment mieux gérée
je me suis dit que c'etait une question de malloc utilisé à la compilation de perl, mais toutes les version sont usemymalloc='n'
kk1 a une autre explication?
Message édité par pospos le 24-10-2002 à 13:28:43