This uses 4.4MB of ram to construct 15,000 objects each of 10 x 15-char fields.
The array holding those 15k objects (containing a total of 2.15MB of string data) occupies 3.67MB of ram.
The accessors are lvalue subs and their performance should be comparable with any other perl OO objects.
No validation is done.
use Class::Struct::Compact;
use Devel::Size qw[ total_size ];
use Data::Dump qw[ pp ];
my @chars = ( 'a'..'z' );
sub dummy {
my $n = shift;
join '', @chars[ map int( rand @chars ), 1 .. $n ];
}
Class::Struct::Compact->new(
'Test',
F1 => 15, F2 => 15, F3 => 15, F4 => 15, F5 => 15,
F6 => 15, F7 => 15, F8 => 15, F9 => 15, F10 => 15,
);
printf "Class constructed: check mem: "; <>;
our $N //= 15_000;
my @db;
push @db, Test->new( dummy( 150 ) ) for 1 .. $N;
printf "Instances created: check mem: "; <>;
@db = sort{
$a->F1 cmp $b->F1
} @db;
#pp \@db;
printf "Instances sorted: check mem: "; <>;
print "total size: ", total_size \@db;
for( 0, $#db ) {
print "Record $_";
print "\t", $db[ $_ ]->F1;
print "\t", $db[ $_ ]->F2;
print "\t", $db[ $_ ]->F3;
print "\t", $db[ $_ ]->F4;
print "\t", $db[ $_ ]->F5;
print "\t", $db[ $_ ]->F6;
print "\t", $db[ $_ ]->F7;
print "\t", $db[ $_ ]->F8;
print "\t", $db[ $_ ]->F9;
print "\t", $db[ $_ ]->F10;
}
__END__
C:\test>perl \perl64\site\lib\Class\Struct\Compact.pm
Class constructed: check mem: 4.6MB
Instances created: check mem: 9.0MB
Instances sorted: check mem: 9.1MB
total size: 3851232
Record 0
aaartlhgpkapaol
jrbkelwlfklkjgn
rhdrrltzezyuenc
zxccfpxpbzcxoqy
ysfqlfkrnhmaqhf
vclpccofujbyars
gwrdngknxjyxxni
foiuaojwzrqouzc
msbepsdptomdtbe
qazhgrkywspzsts
Record 14999
zzypdjmcgmgxnso
yzygmkgabelvqlj
xihybqagfiydipo
fpgsaybyhrfawuc
zyxekczeaxfomrs
lwyannakxmgists
nzehvwysfvpkeuf
gggdblbshwhgnto
vtdgbjvgwevpurx
wtdgjumncxgfaih
The module & test code:
With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.