Perl
在 perl 腳本中釋放記憶體
我想要所有這些組合,但我沒有足夠的記憶體。如何釋放腳本中的記憶體?
use strict; use warnings; use Algorithm::Combinatorics 'variations_with_repetition'; my @let = qw/ A G C T /; my @cad = variations_with_repetition(\@let, 24); print "@$_\n" for @cad;
解決方案是簡單地使用
iterators
. 通過將結果分配給variations_with_repetition
標量,它會生成一個迭代器,您每次都可以查詢該迭代器以獲取下一個元素。通過這樣做,您不會將整個列表保存在記憶體中,並且您可以立即訪問第一個元素。這是一個可愛的概念,叫做惰性評估。這是您的案例的程式碼:use strict; use warnings; use Algorithm::Combinatorics 'variations_with_repetition'; my @let = qw / A G C T/; my $cad = variations_with_repetition(\@let,24); while(my $c = $cad->next) { print "@$c\n"; }
請注意,迭代器實際上返回對數組的引用,您必須首先取消引用,然後加入或對其執行任何您喜歡的操作。
*測試結果:*我無法在我的機器上執行初始程式碼(記憶體使用量按預期無限增長),但使用迭代器,我立即開始獲取輸出行,perl 幾乎不消耗任何記憶體。