作者jjt (jet)
看板perl
标题Re: [问题] 写Perl程式减少记忆体使用量
时间Sun Oct 21 19:52:35 2007
※ 引述《dickyhu (轩)》之铭言:
: 请问一下各位高手。
: 我目前写程式每次都会觉得记忆体的使用量超大的。
: 因为我在Perl程式中用到很多的 阵列和变数 ( @tim 、$tp)
: 我看网路上说 可以在宣告阵列或变数前加一个 my @tim;
: 这样在这个阵列使用完後就可以把记忆体release出来。
: 我现在还是搞不懂什麽叫 全域变数、区域变数。
: 可以举个例子和我解释吗? 谢谢。
: 像我之前写一个程式,是去把17个目录里面的资料,读出来,然後检查档名是不是符合规则,而每个目录中大约都有500~1000个档案,结果程式在跑的时候,竟然吃掉1G的记忆体,然後常常执行到一半就变成 Out of memory.
: * 107-10-21 15:43:06 补充
: 请问在宣告时应该怎麽宣告呢?
: my @all;
: my @all={};
: undef @it; # 想要清除此阵列用
: @it=undef(); # 想要清除此阵列用
: 这几种用法,那个是正确的啊??
你如果是这样写
@files = <*.*>;
foreach(@files)
{
if(/xxxxx/){ do something;}
open F, "$_";
@a= <F>;
push @b, @a;
close F;
}
类似这种写法的话,你总共档案有多大,记忆体就吃多少
这跟全域变数,区域变数无关 是程式演算法问题
undef @it 跟 @it=undef 效果差不多XD
一个是把@it完全清掉 $#it=-1
一个是把@it的内容改成undef , $it[0]=undef $#it=0
我是从这本书开始学perl的
http://www.hcchien.org/
全域变数跟区域变数是写程式很基本的东西
就跟中文的ㄅㄆㄇ一样
先把那本书的前12章看完 相信这些问题自然就不成为问题
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.121.197.133