1
我写了这个示例代码来检查整数或字符串索引在perl哈希中是否更好。多哈希中的整数索引比字符索引好
use Time::Local;
use Time::HiRes qw/gettimeofday/;
my %string_hash;
my %int_hash;
$i_count = 100;
$j_count = 100;
$k_count = 1000;
foreach $i (0..$i_count)
{
foreach $i (0..$j_count)
{
foreach $k (0..$k_count)
{
$i += 0;$j += 0;$k += 0;
$int_hash{$i}->{$j}->{$k} = 1;
$string_hash{"$i"}->{"$j"}->{"$k"} = 1;
}
}
}
my $profile = gettimeofday();
print "String hash start:$profile\n";
foreach $i (keys %string_hash)
{
foreach $j(keys %{ $string_hash{$i} })
{
foreach $k(keys %{ $string_hash{$i}{$j} })
{
$i += 0;$j += 0;$k += 0;
$val = $string_hash{$i}->{$j}->{$k};
}
}
}
printf("String hash took:%d millisec\n", (gettimeofday()-$profile)*1000);
$profile = gettimeofday();
print "Int hash start:$profile\n";
foreach $i (keys %int_hash)
{
foreach $j(keys %{ $int_hash{$i} })
{
foreach $k(keys %{ $int_hash{$i}{$j} })
{
$i += 0;$j += 0;$k += 0;
$val = $int_hash{$i}->{$j}->{$k};
}
}
}
printf("Int hash took:%d millisec\n", (gettimeofday()-$profile)*1000);
我得到这个输出
$ perl的hashs.pl 字符串散列开始:1308199085.84375 字符串散了:500毫秒 诠释哈希开始:1308199086.34379 诠释哈希了:428毫秒
我试图在Cygwin(Windows)和Perl版本是5.10.1
我有几个问题在这里 1)Whe n我们在Hash中存储一个整数是否为其计算散列键,或者Perl是否直接在存储区中使用该值? 2)而不是存储一个字符串,如果我将其转换为整数,无论我会得到任何性能改进? 3)如果我需要保留一个64位的值作为multihash中的键值,这将提供更好的性能bigint或将64bit值保留为一个字符串
使用基准测试模块 – ysth 2011-06-16 04:51:08
如果您使用从0开始的连续整数,则应该使用一个数组,该数组的速度将显着快于散列。 – 2011-06-16 20:48:43
它不顺序并从一个bigint文件中读取数据 – Raghuram 2011-06-17 05:23:54