Es muy importante que al crear algún desarrollo en perl, sepan controlar la memoria, lo peor que les puede pasar es que su servidor se quede sin recursos debido a que su CGI usa memoria excesiva.
Esto se potencializa si su CGI es usado por decenas, centenas o miles de personas al mismo tiempo, lo que puede generar verdaderos dolores de cabeza.
Esto se puede evitar de una manera rápida, y se hace comprendiendo cómo funciona la creación y destrucción de variables en perl.
En perl como en otros lenguajes como JAVA no nos tenemos que preocupar por la destrucción de nuestra variables para liberar memoria, pues el programa lo hace por nosotros. Sin embargo si podemos ayudar a perl a optimizar la manera en que destruye nuestras variables.
En primer lugar debemos de siempre y digo SIEMPRE usar variables locales, son pocas veces en las que realmente necesitamos variables globales.
La principal razón es que cuando usamos las variables locales estas tienen un "scope", el scope, término que se usa en inglés, es el alcance que tiene la variable.
Cuando una variable es declarada haciéndolo ya sea con my o con local (yo les recomiendo que siempre lo hagan con my), por ejemplo:
my $var;
local $var;
Al declararla ya tenemos un alcance, la variable será destruida cuando perl encuentre un "}". De esta manera si una variable es declarada al inicio de una función esta será destruida cuando perl encuentre el "}" final de la función, lo mismo pasa con los loops, enunciados de control, etc. es decir todo lo que tenga un par de "{}".
Sabiendo esto debemos de aprender a optimizar la manera en que declaramos nuestras variables.
Les voy a poner un ejemplo rápido, vean estos dos pedazos de código muy similares:
#EJEMPLO 1
my $i;
for($i=0; $i<10000; $i++){
#
}
EJEMPLO 2
for(my $i=0; $i<10000; $i++){
#
}
¿Se ven similares no? Pero fíjense donde estoy declarando la variable en el primer ejemplo, y donde lo estoy haciendo en el segundo ejemplo.
En el primer ejemplo al acabar el loop la variable $i quedará en memoria con el número "10000", lo que significa que usará algunos bytes de memoria mientras dure el programa.
En el segundo ejemplo, debido a que declare la variable en el loop esta será destruida al terminar el loop, liberando la memoria que esa variable este usando.
Con este sencillo ejemplo, aunque no muy grande, vemos como tiene suma importancia donde declaramos nuestras variables, ahorita no parecería importante, pero imagínense con variables que contienen megas o gigas de data.
Usuarios que han visto este tema también han visto...
- Desplegar HTML con Perl
- Crear un servidor de MP3 con Perl
- Leer documentos via HTTP
- Expresiones Regulares en Perl
- Variables locales en Perl
Información legal | Política de Privacidad | Contacte con nosotros
Otro proyecto de Factoría de Internet. Copyright© 2003-2008 Factoría de Internet S.L.. Todos los derechos reservados.