Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 在内存中存储散列_Performance_Perl_Serialization_Hash_Persistence - Fatal编程技术网

Performance 在内存中存储散列

Performance 在内存中存储散列,performance,perl,serialization,hash,persistence,Performance,Perl,Serialization,Hash,Persistence,我有1 GB的表文件,数据由列分隔。我已经解析了它并存储在散列中。 稍后,我将使用此哈希进行进一步的工作。但是在开发代码的过程中,每次编译测试时都会执行“解析并存储到哈希”,这使得我的程序运行缓慢 有没有什么方法可以存储它,这样我就不必一次又一次地编译它了 不太可能。这些信息必须以某种方式载入内存。不过,将散列对象序列化到磁盘会有所帮助,因为反序列化可能比代码快 您可以查看freeze或获取更多提示 退房: 您现在需要做的就是在解析后将$string存储在一个文件中,读取它并解冻它 Perl中的

我有1 GB的表文件,数据由列分隔。我已经解析了它并存储在散列中。 稍后,我将使用此哈希进行进一步的工作。但是在开发代码的过程中,每次编译测试时都会执行“解析并存储到哈希”,这使得我的程序运行缓慢


有没有什么方法可以存储它,这样我就不必一次又一次地编译它了

不太可能。这些信息必须以某种方式载入内存。不过,将散列对象序列化到磁盘会有所帮助,因为反序列化可能比代码快

您可以查看
freeze
或获取更多提示

退房:


您现在需要做的就是在解析后将
$string
存储在一个文件中,读取它并
解冻它

Perl中的数据不是以非常有效的方式存储的。在最坏的情况下,它可以占用数十(20-80)倍的内存。请注意,只有在最坏的情况下才会发生这种情况。如果1GB数据集出现这种情况,您应该注意到。所以我认为这不是你的情况。Perl数据结构非常快,它们常常以内存换取速度。如果您的案例中的内存量是合理的,您可以处理它,并使用由或更可能由推荐的直接方法


如果您测量到案例中的内存消耗太大,您可以使用一些嵌入式键/值存储。如果加载后不修改数据,可以使用比后者快一点的方法,但后者允许您动态修改数据。您可以稍后选择,因为这是一种更常见、更灵活的解决方案。

位于core中,比
冻结解冻
使用更广泛。抱歉。自从我上次做Perl已经十年了。我有点生锈了,不知道它是怎么工作的。。。但是我非常喜欢函数名
freeze
saw
use FreezeThaw qw(freeze thaw cmpStr safeFreeze cmpStrHard);
$string = freeze $data1, $data2, $data3;
...
($olddata1, $olddata2, $olddata3) = thaw $string;
if (cmpStr($olddata2,$data2) == 0) {print "OK!"}