加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在运行之间保留大型Perl对象以便重用?

发布时间:2020-12-15 23:27:43 所属栏目:大数据 来源:网络整理
导读:我有一个大的 XML文件,用 XML::Simple解析需要40多秒. 我希望能够缓存生成的解析对象,以便在下次运行时我可以检索已解析的对象而不是重新整理整个文件. 我已经看过使用Data::Dumper,但文档有点缺乏如何从磁盘文件存储和检索其输出.我看过的其他课程(例如Cach
我有一个大的 XML文件,用 XML::Simple解析需要40多秒.

我希望能够缓存生成的解析对象,以便在下次运行时我可以检索已解析的对象而不是重新整理整个文件.

我已经看过使用Data::Dumper,但文档有点缺乏如何从磁盘文件存储和检索其输出.我看过的其他课程(例如Cache::Cache似乎是为了存储许多小物件而设计的,而不是单个大物体.

任何人都可以推荐专为此设计的模块吗?

编辑. XML文件是ftp://ftp.rfc-editor.org/in-notes/rfc-index.xml,我使用Storable来加速后续运行.更改XML解析器将需要非常重要的代码更改.

在我的Mac Pro基准测试中,使用XML::Simple和Storable读取整个文件的数据是:

s/iter  test1  test2
test1   47.8     --  -100%
test2  0.148 32185%     --

解决方法

Data :: Dumper实际上非常简单.如果你的对象是hashref $HashRef:

# Write
open(FILE,">your_filename") || die "Can not open: $!";
print FILE Data::Dumper->Dump([$HashRef],["HashRef"]);
close(FILE) || die "Error closing file: $!";

# Read
my $HashRef;
$HashRef = eval { do "your_filename" };
   # Might need "no strict;" before and "use strict;" after "do"
die "Error reading: $@" if $@;
# Now $HashRef is what it was before writing

另一个不错的选择是使用Storable.从POD:

use Storable;
store %table,'file';
$hashref = retrieve('file');

有关各种选项的非常好的指南(以及Data :: Dumper使用的更好示例),请参阅Chapter 14 “Persistence” of brian d foy’s “Mastering Perl” book

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读