He inhabilitado un archivo grande usando File :: Slurp, pero dado el tamaño del archivo puedo ver que debo tenerlo en la memoria dos veces o quizás se está inflando al convertirlo en unicode de 16 bits. ¿Cómo puedo diagnosticar ese tipo de problema en Perl?¿Qué herramienta debo usar para encontrar mi asignación de memoria en Perl?
El archivo que obtuve tiene un tamaño de 800mb y mi proceso de perl que está analizando esos datos tiene aproximadamente 1.6gb asignados en tiempo de ejecución.
Me doy cuenta de que puedo estar equivocado sobre la razón del problema, pero no estoy seguro de la forma más eficaz de probar/refutar mi teoría.
Actualización:
He elminated poco fiables codificación de caracteres de la lista de sospechosos. Parece que estoy copiando la variable en algún momento, simplemente no puedo averiguar dónde.
Actualización 2:
ahora he hecho un poco más investigación y descubrió que en realidad es sólo conseguir los datos de File :: Slurp que está causando el problema. Tenía una mirada a través de la documentación y descubrí que puedo conseguirlo para devolver una scalar_ref, es decir
my $data = read_file($file, binmode => ':raw', scalar_ref => 1);
Entonces no reciben la inflación de mi memoria. Lo cual tiene algún sentido y es lo más lógico que hacer cuando obtengo los datos en mi situación.
La información sobre cómo observar qué variables existen, etc. en general ha sido útil, aunque gracias.
Esta publicación de SO puede ser útil: [¿Cómo puedo determinar mediante programación el uso de memoria de mi programa Perl en Windows?] (http://stackoverflow.com/questions/1115743/how-can-i-programmatically-determine- my-perl-programs-memory-use-under-windows). – Zaid
Eso es generalmente interesante, aunque los datos en ese nivel me han hecho darme cuenta de que tengo este error. –
¿Está sorbiendo todo el archivo necesario para su proceso? ¿No es posible un análisis línea por línea? –