节省内存和编译时间

时间:2015-05-04 09:02:58

标签: perl runtime compiler-optimization

有没有办法使用模块在perl中节省内存和编译时间?例如,不加载所有不必要的,未使用的潜艇?

或者,如果我将我的潜艇分成许多不同的pm文件,然后我只加载必要的模块,这是一个好方法?例如:

#!/usr/bin/perl -w

sub mysub1() {
    use MySubsGroup1;
}
sub mysub2() {
    use MySubsGroup2;
}

此解决方案使用更少的内存并减少编译时间?或者只加载必要的函数的最佳做法是什么?

2 个答案:

答案 0 :(得分:4)

来自perldoc autouse

  

autouse - 推迟加载模块直到使用函数

     

如果已加载模块Module,则声明

     

use autouse 'Module' => qw(func1 func2($;$));

     

相当于

     

use Module qw(func1 func2);

答案 1 :(得分:3)

@store = Store.find(1) @today = Date.today - 1.days @open_items = ChecklistItem.find_by_sql(["SELECT checklist_items.*, checklist_checks.* FROM checklist_items LEFT OUTER JOIN checklist_checks ON checklist_checks.checklist_item_id = checklist_items.id AND checklist_checks.store_id = ? AND checklist_checks.report_date = ? WHERE checklist_items.list_type='open' AND (checklist_items.store_id=? OR checklist_items.store_ID IS NULL)", @store.id, @today, @store_id]) ActiveRecord::Associations::Preloader.new.preload(@open_items, :checklist_checks) > @open_items.first.name => "Turn on the lights" > @open_items.first.id => nil 总是在编译时运行。但use没有。因此,您可以在任何函数调用之前使用require

当然,只有在require Module;第一次执行(并保持加载)时才会加载模块。

请注意require也会在已加载的模块上调用use,您也可能想要这样做。 importuse Module qw(f1 f2)的编译时版本。