Podes probar con: http://pastie.org/224427

Probé esto para un aplicación que consume muchísima de la memoria disponible 
del sistema.  Es un controlador que visita recursivamente a un árbol de 
directorios.  Para cada archivo que encuenta (un .po que tiene traducciones) 
genera una lista de original/traducción que luego se itera y se mete en la base 
de datos.

Probé con esto (MemoryProfiler) y parece que algunos hashes y strings no se 
liberan sino al final de la recursión.  No sé si llamarlo un leak, porque de 
hecho la memoria es liberada al final, pero no en las iteraciones y eso que 
puse un ObjectSpace.garbage_collect por todos lados.

Probé con el código que sigue y a cantidad de hash llega hasta 243 (arrancando 
en 7).  ¿Alguien sabe por qué no se libera la memoria cuando el hash sale de 
scope?

require 'MemoryProfiler.rb'

def funcion
 h = Hash.new
 l = Array.new

 for i in [1,2,3,4]
   h[:izq] = "primero"
   h[:der] = "ultimo"
   l << h
   h = Hash.new
 end
 return l
end

def otra n
 for i in funcion
   print i[:der] + ' ' + n.to_s + ' ' + i[:izq] + "\n"
   $stdout.flush
 end
end

def recursiva n
 sleep 1
 if n > 1
   otra n
   recursiva n - 1
 end
end

MemoryProfiler.start(:delay => 2, :string_debug => true)
recursiva(60)
sleep 10


Eduardo.
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a