Re: [問題] 寫Perl程式減少記憶體使用量
※ 引述《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
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
Perl 近期熱門文章
PTT數位生活區 即時熱門文章