在Perl中查找内存泄漏时遇到问题
我觉得这段代码中有内存泄漏:在Perl中查找内存泄漏时遇到问题,perl,memory-leaks,xml-parsing,strawberry-perl,Perl,Memory Leaks,Xml Parsing,Strawberry Perl,我觉得这段代码中有内存泄漏: if (ref($init{'time-layout'}) eq 'HASH') { my %time= % {$init{'time-layout'}}; my @times= @ {$time{'start-valid-time'}}; if (ref($init{parameters}) eq 'HASH') { %param= % {$init{parameters}}; if (ref($param{
if (ref($init{'time-layout'}) eq 'HASH') {
my %time= % {$init{'time-layout'}};
my @times= @ {$time{'start-valid-time'}};
if (ref($init{parameters}) eq 'HASH') {
%param= % {$init{parameters}};
if (ref($param{'wind-speed'}) eq 'HASH') {
%wind= % {$param{'wind-speed'}};
@windvalue= @ {$wind{value}};
%temp= % {$param{'temperature'}};
@tempvalue = @ {$temp{value}};
%wdir= % {$param{'direction'}};
@wdirvalue = @ {$wdir{value}};
%hum= % {$param{'humidity'}};
@humvalue = @ {$hum{value}};
undef %wind;
undef %temp;
undef %wdir;
undef %hum;}
undef %param;}
这是一个子系统,输入来自子系统。具体地说,输入是(如果重要的话)
其中,$lat
和$lon
是纬度和经度
代码需要几个小时才能运行,将数据插入SQL server,而在完成之前,Perl实例占用了几GB或更多的RAM。我相信这对某些人来说很简单,但我充其量只是一个Perl新手 快速搜索“xml::simple memory leak”找到了Yahoo::search的文档,该文档声称: Simple在引擎盖下使用XML::Parser,至少在 在我测试过的系统中,XML::Parser的内存严重不足 这使得它非常不受欢迎
内存泄漏可能(甚至可能)根本不在您的代码中。快速搜索“xml::simple memory leak”找到了Yahoo::search的文档,该文档声称: Simple在引擎盖下使用XML::Parser,至少在 在我测试过的系统中,XML::Parser的内存严重不足 这使得它非常不受欢迎
内存泄漏可能(甚至可能)根本不在代码中。
XML::Simple
在解析大型文件时非常无效(对我来说,100Mb文件占用3Gb内存)。尝试对数据使用XML::Twig。XML::Simple
在解析大型文件时非常无效(对我来说,100Mb文件占用3Gb内存)。尝试使用XML::Twig作为您的数据。除了用户的评论
有这么多XMLCPAN模块,很难决定应该使用哪一个
从许多人的答案和网络阅读来看,这是一个首选模块,更适合大文件。他们中的许多人都不推荐使用XML::Simple
,他们说XML::Simple
适合小文件,但在处理大XML文件时会出现问题<代码>XML::Twig更好(从它的文档中),但即使这样也存在内存泄漏问题。(请参阅)
除了您的评论,您还想参考
有这么多XMLCPAN模块,很难决定应该使用哪一个
从许多人的答案和网络阅读来看,这是一个首选模块,更适合大文件。他们中的许多人都不推荐使用XML::Simple
,他们说XML::Simple
适合小文件,但在处理大XML文件时会出现问题<代码>XML::Twig更好(从它的文档中),但即使这样也存在内存泄漏问题。(请参阅)
您还想引用如果您没有对要保持只读的数据进行更改,请不要复制它,例如,只需说
@windvalue=@{$init{parameters}->{wind-speed'}->{value}
@imran我做了这些更改,看起来可能有点帮助,但关于XML::Simple存在问题的其他答案似乎是正确的。您使用的Perl版本是什么?@Drt我运行的是草莓Perl 5.16。2@DeanMacGregor我建议使用XML::LibXML::Reader模块要保持只读,不要复制它,例如,只需说@windvalue=@{$init{parameters}->{wind-speed'}->{value}
@imran我做了这些更改,看起来可能有点帮助,但关于XML::Simple存在问题的其他答案似乎是正确的。您使用的Perl版本是什么?@Drt我运行的是草莓Perl 5.16。2@DeanMacGregor我建议使用XML::LibXML::Reader模块,我相信这两者都是因为我执行了imran的建议有点帮助,我只是发现每次我传递XMLin命令时,我的RAM使用量都在增加。这就是你提到的问题吗?我希望不是10年前的事。我相信这两个原因都是因为我执行了imran的建议,这对我有一点帮助。我只是发现,每次我跳过XMLin命令时,我的RAM使用率都在上升。这就是你提到的问题吗?我希望它不会有10年的历史。
http://graphical.weather.gov/xml/sample_products/browser_interface/ndfdXMLclient.php? lat=$lat&lon=$lon&product=time-series&begin=2004-01-01T00:00:00&end=2013-04-20T00:00:00&temp=temp&wspd=wspd&rh=rh&wdir=wdir";