+ -
当前位置:首页 → 问答吧 → Perl 如何释放读取的xml文件内存(XML:Simple模块)?

Perl 如何释放读取的xml文件内存(XML:Simple模块)?

时间:2010-08-22

来源:互联网

本帖最后由 brant_chen 于 2010-08-22 00:42 编辑

我用的是XML::Simple。

我发现,我用(xml文件有2MB左右)

$xml_file_content = XMLin($xml_name);

后,内存涨了很多,我就把要读的内容存到一个hash后,然后置
$xml_file_content = undef;
sleep 10; # 留点时间观察内存释放没有
结果发现内存灭有释放呢?
请问怎么释放啊?
谢谢!
  1. #!/usr/bin/perl
  2. use XML::Simple;
  3. use Data::Dumper;

  4. my %table;
  5. my $xml_file1="I18n.tst";
  6. my $xml_file2="I18n2.tst";
  7. my $xml_name="List.xml";
  8. my $xml_file_content=undef;

  9. $xml_file_content = XMLin($xml_name);

  10. $table{$xml_file1}=[] unless exists $table{$xml_file1};
  11. $table{$xml_file2}=[] unless exists $table{$xml_file2};

  12. foreach my $key (keys (%{$xml_file_content->{$xml_file1}->{'en_iso-8859-1'}})){
  13.    print "test1:$key". "\n";
  14.    print "test12:$xml_file_content->{$xml_file1}->{'en_iso-8859-1'}->{$key}\n";   
  15.    push @{$table{$xml_file1}}, "[".$key."]".$xml_file_content->{$xml_file1}->{'en_iso-8859-1'}->{$key};
  16. }

  17. foreach my $key (keys (%{$xml_file_content->{$xml_file2}->{'en_iso-8859-1'}})){
  18.    print "test2:$key". "\n";
  19.    print "test22:$xml_file_content->{$xml_file2}->{'en_iso-8859-1'}->{$key}\n";   
  20.    push @{$table{$xml_file2}}, "[".$key."]".$xml_file_content->{$xml_file2}->{'en_iso-8859-1'}->{$key};
  21. }

  22. $xml_file_content=undef;

  23. foreach $xml_file (sort keys %table) {
  24.   print "\n$xml_file:\n";
  25.   my @cities = @{$table{$xml_file}};
  26.   print "test3:" . join ', ', sort @cities;
  27.   print ".\n";
  28. }
  29. sleep 10;
  30. exit 0;
复制代码

作者: brant_chen   发布时间: 2010-08-22

因为存在$xml_file_content的引用··所以··没释放··除非你自己undef···

作者: wfnh   发布时间: 2010-08-22