Büyük XML dosyalarını (60 GB +) XML::Twig ile ayrıştırıp bir OO (Moose) komut dosyasında kullanıyorum. Öğeleri belleğe okuduktan sonra öğeleri ayrıştırmak için twig_handlers
seçeneğini kullanıyorum. Ancak, Element ve Twig ile nasıl başa çıkabileceğimi bilmiyorum. Ben (tamamen ve OO) Moose kullanılan ÖnceAlt işleyicideki XML XML iç geçirme
, benim senaryom şöyle baktım (ve amele):
my $twig = XML::Twig->new(
twig_handlers => {
$outer_tag => \&_process_tree,
}
);
$twig->parsefile($input_file);
sub _process_tree {
my ($fulltwig, $twig) = @_;
$twig->cut;
$fulltwig->purge;
# Do stuff with twig
}
Ve şimdi ben böyle yapardım.
my $twig = XML::Twig->new(
twig_handlers => {
$self->outer_tag => sub {
$self->_process_tree($_);
}
}
);
$twig->parsefile($self->input_file);
sub _process_tree {
my ($self, $twig) = @_;
$twig->cut;
# Do stuff with twig
# But now the 'full twig' is not purged
}
şey
Ben şimdifulltwig
temizlemesini Eksik görüyoruz olmasıdır. İlk olarak, OO olmayan versiyonda - temizleme işleminin hafızayı kurtarmaya yardımcı olacağını düşündüm: mümkün olan en kısa zamanda fulltwig'den kurtulmak. OO kullanarak (ve işleyicisi içinde açık bir
sub{}
güvenmek zorunda) Ancak, ben belgeleri
$ _, öğesinin ayarlanmış olduğunu söylüyor çünkü tam dal tasfiye nasıl görmüyorum, yüzden
para => sub { $_->set_tag('p'); }
yüzden işlemek istediğiniz Unsuru hakkında konuşmak gibi satır içi işleyicileri yazmak kolaydır, ancak fulltwig kendisi. Peki, alt programa aktarılmazsa nasıl silebilirim?
Aah, benim hatam! Neler olup bittiğini görmek için '@ 'kontrol etmeliydim. Teşekkürler! Tam dalmayı temizlemenin bir dezavantajı var mıdır? * Sonra * kesilmiş dalla bir şeyler yaptın mı? Benim düşüncem, * elementi * keserek hemen temizlemekti, böylece bellek mümkün olan en kısa sürede temizlendi. Yanlış olabilirim? Bu arada büyük modül, onu kullanıyoruz ** hepsi ** zaman! –
Temizleme yaptığınızda farketmemelidir. En önemlisi, bir sonraki alt ağacı ayrıştırmaya başlamadan önce hafızayı geri almaktır. Ve teşekkürler; -) – mirod
Bu da köri modülü için iyi bir kullanım durumu olurdu. – simbabque