Ho bevuto un grosso file usando File :: Slurp ma vista la dimensione del file posso vedere che devo averlo in memoria due volte o forse si sta gonfiando diventando un unicode a 16 bit. Come posso diagnosticare meglio quel tipo di problema in Perl?Quale strumento dovrei usare per scoprire la mia allocazione di memoria in Perl?
Il file che ho inserito ha una dimensione di 800mb e il mio processo perl che analizza i dati ha approssimativamente 1.6gb allocati in fase di esecuzione.
Mi rendo conto che potrei avere torto sulla mia ragione del problema, ma non sono sicuro che il modo più efficace per dimostrare/confutare la mia teoria.
Aggiornamento:
ho elminated codifica dei caratteri poco raccomandabile dalla lista dei sospetti. A un certo punto sembra che copi la variabile, non riesco a capire dove.
Aggiornamento 2:
Ora ho fatto un po 'di indagine e ha scoperto che in realtà è solo ottenere i dati dal File :: Slurp che sta causando il problema. Ho dato un'occhiata attraverso la documentazione e ha scoperto che posso farlo per restituire uno scalar_ref, vale a dire
my $data = read_file($file, binmode => ':raw', scalar_ref => 1);
Allora non si ottiene l'inflazione della mia memoria. Il che ha un senso ed è la cosa più logica da fare quando si ottengono i dati nella mia situazione.
Le informazioni sull'esame delle variabili esistenti ecc., Tuttavia, sono generalmente utili, grazie.
Questo post in SO può essere utile: [Come posso determinare a livello di codice l'utilizzo della memoria del mio programma Perl in Windows?] (http://stackoverflow.com/questions/1115743/how-can-i-programmatically-determine- my-perl-programmi-memoria-utilizzo-under-finestre). – Zaid
Questo è generalmente interessante anche se sono dati a quel livello che mi hanno fatto capire che ho questo bug. –
È lo slurping dell'intero file necessario per il processo? L'analisi linea per linea non è possibile? –