2010-07-23 111 views
2

我有1 GB的表格,其中有按列分隔的數據。我已經解析並存儲在哈希中。 稍後我將使用這個散列表進行進一步的工作。但在開發我的代碼時,我每次編譯進行測試時,都會執行「解析並存儲到哈希」,這會使我的程序變慢。將哈希存儲在內存中

有沒有什麼方法可以存儲它,以便我不需要一次又一次地編譯它。

回答

2

不是。這些信息必須以某種方式加載到內存中。不過,將哈希對象序列化到磁盤可能會有所幫助,因爲反序列化可能比您的代碼更快。

你可以檢查出freezecheck wikipedia on Serialization進一步提示。

退房perl documentation for FreezeThaw

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!"} 

所有你現在需要做的是存儲在$string一次解析的文件,閱讀並thaw吧!

+5

['可存儲'](http://p3rl.org/Storable)是核心,比'FreezeThaw'更廣泛。 – daxim 2010-07-23 09:11:22

+0

對不起。自從我上次做Perl以來已經有十年了。我有點生疏,不知道它是如何工作的......但我真的很喜歡函數名稱'freeze'和'thaw'。 – 2010-07-23 09:55:48

0

Perl中的數據沒有以非常有效的方式存儲。它可以在最壞的情況下多達數十(20-80)倍的內存。請注意,只有在最壞的情況下才會發生。如果它發生在你的1GB數據集中,你應該注意。所以我認爲這不是你的情況。 Perl的數據結構非常快,它們通常爲了速度而交換內存。如果你的情況的內存量是合理的,你可以解決它,並使用直線前進的Daren Thomas或更可能通過Storable推薦daxim接近recommended

如果你衡量你的情況內存消耗過大,你可以與一些嵌入式鍵/值存儲去。如果您在加載後不修改數據,則可以使用比BerkeleyDB快一點的CDB_File,但後者允許您即時修改數據。您以後也可以選擇,因爲它是更爲常見和靈活的解決方案。