[Cascavel-pm] Medir uso de memória [Era: File::Linting nao funciona]

Gilmar Santos Jr gilmarjr em dcc.ufba.br
Quinta Junho 8 09:04:10 PDT 2006


Igor Sutton wrote:
> <code>
> use strict;
> use warnings;
>
> my $basedir = "/var/www";
>
> opendir my $dir, $basedir or die "Problemas ao abrir diretório: $!";
> while (defined(my $file = readdir($dir))) {
>     next unless $file =~ m/^filesys/;
>     print "Arquivo: $file\n";
> }
> </code>
Aproveitando que tocamos nesse método... eu sempre uso dessa forma:

<code>
foreach (readdir $dir) {
   (...)
}
</code>

A documentação do readdir diz que quando avaliado em contexto escalar
retorna o próximo item ou undef caso não existam mais itens. Em contexto
de lista retorna todos os elementos encontrados.

A primeira pergunta é: qual dos dois métodos é mais rápido? (isso pode
ser respondido com um benchmark simples) e a segunda é:

existe diferença no uso de memória nas duas maneiras?

A princípio parece óbvio que sim, pois colocar uma lista inteira na
memória gasta mais do que pegar item a item, porém o contexto de lista é
no foreach, daí, a princípio o compilador poderia fazer essa otimização
e pegar de um em um.

Para medir tempo de execução tenho o Benchmark... e para medir o uso de
memória?

Eu poderia criar um diretório com milhões de entradas e executar o
script pra esse diretório, e então medir o tamanho do segmento de dados
do processo, mas isso é tão impreciso quanto colocar pra rodar com o
'time' do bash (em linux) querendo medir tempo.
Alguém conhece um módulo similar pra medir uso de memória? Buscando por
'memory usage' na CPAN só achei o Benchmark::Harness::MemoryUsage
<http://search.cpan.org/%7Eglennwood/Benchmark-Harness-1.07/lib/Benchmark/Harness/MemoryUsage.pm#Benchmark%3A%3AHarness%3A%3AMemoryUsage>,
mas não sei até onde ele é funcional (não tem documentação e é de 2004).

E alguém já fez essa comparação que disse acima?

Valeu!

Gilmar.
- Salvador Perl Mongers


Mais detalhes sobre a lista de discussão Cascavel-pm