小编lim*_*eri的帖子

Perl创建对象的速度非常慢

我有一个perl脚本,它从数据库读取大约50,000行,并将它们存储在散列数组中.标准DBI代码.我宁愿将数据放入可以非常干净地传递给其他代码模块的对象,而不是直接在哈希上工作.我正在阅读的表格中有15多列.我的代码基本上看起来像:

my $db = DBI->connect(); # Just pretend you see a proper DBI connect here
my $resultSet = $db->selectall_arrayref($sql);
$db->disconnect();

# Here's where the problem starts.
my %objects;
for my $row (@{$resultSet}) {
    my ($col1, $col2, ..., $col15) = @{$row};
    my %inputHash;
    $inputHash{col1} = $col1 if $col1;
    ...
    $inputHash{col15} = $col1 if $col15;
    my $obj = Model::Object->new(%inputHash);
    $objects{$col1} = $obj;
}
return values %objects;
Run Code Online (Sandbox Code Playgroud)

它将东西收集到哈希中以消除选择中的重复.问题开始于评论下面的循环中,"这是问题开始的地方".我在循环中添加了一条消息,为每100个创建的对象记录一行.前100个对象是在5秒内创建的.接下来的100分钟需要16秒.达到300需要30多秒.这是多达9000个对象,需要12分钟以上才能创建100个对象.我认为50,000个对象不足以产生这些问题.

正在创建的Model :: Object是一个具有每个属性的getter和setter的类.它有一个新方法和一个序列化方法(本质上是一个toString)就是这样.这没有逻辑.

我在Windows笔记本电脑上运行ActiveState Perl 5.16,内存为8 GB,i7处理器(3年)和具有合理空间的SSD驱动器.我在具有相同版本Perl的Linux机器上看到过这个,所以我不认为这是硬件.我需要留在AS Perl的5.16.任何有关如何提高性能的建议都将受到赞赏.谢谢.

perl performance object

3
推荐指数
1
解决办法
146
查看次数

标签 统计

object ×1

performance ×1

perl ×1