【发布时间】:2010-11-13 21:09:26
【问题描述】:
我有许多脚本,它们目前从一些 .CSV 文件中读取大量数据。为了提高效率,我使用Text::CSV_XS 模块将它们读入,然后使用其中一列作为索引创建散列。但是,我有很多 很多 文件,而且它们都很大。每个脚本都需要重新读取数据。
问题是:我怎样才能持久存储这些 Perl 哈希,以便用最少的 CPU 读回它们?
组合脚本不是一种选择。我希望...
我应用了优化的第二条规则并使用 profiling 发现绝大多数 CPU(大约 90%)在:
Text::CSV_XS::fields
Text::CSV_XS::Parse
Text::CSV_XS::parse
所以,我制作了一个读取所有 .CSV 文件 (Text::CSV_XS) 的测试脚本,使用 Storable 模块转储它们,然后返回并使用 Storable 模块将它们读回。我对此进行了分析,以便查看 CPU 时间:
$ c:/perl/bin/dprofpp.bat
Total Elapsed Time = 1809.397 Seconds
User+System Time = 950.5560 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
25.6 243.6 243.66 126 1.9338 1.9338 Storable::pretrieve
20.5 194.9 194.92 893448 0.0002 0.0002 Text::CSV_XS::fields
9.49 90.19 90.198 893448 0.0001 0.0001 Text::CSV_XS::Parse
7.48 71.07 71.072 126 0.5641 0.5641 Storable::pstore
4.45 42.32 132.52 893448 0.0000 0.0001 Text::CSV_XS::parse
(the rest was in terms of 0.07% or less and can be ignored)
因此,使用 Storable 的加载成本约为 25.6%,而 Text::CSV_XS 的加载成本约为 35%。节省不多...
有没有人建议我如何更有效地读取这些数据?
感谢您的帮助。
【问题讨论】:
标签: perl csv persistence