在我的應用程序中,我需要將Glib GHashTable實例保存到磁盤中,然後再加載到內存中。但我找不到任何方式直接轉儲實例。將GHashTable轉儲到文件
一個選項不是直接保存GHashTable,而是一個接一個地保存條目。加載時,逐個加載條目,並插入新的散列表。但我發現,它需要太多的時間來執行此操作:
g_hash_table_insert(hash, (gpointer) (mer_v), (gpointer) m);
它需要大約20分鐘,負載60萬個條目。如果我只是加載條目但不執行插入操作,則只需要10秒。
那麼有沒有其他方法可以有效地保存GHashTable?由於
======================
更新:
我的哈希表鍵是uint64_t中。此代碼爲10秒左右運行:
for (i = 0; i < 60000000; i++) {
tmp = (uint64_t*) malloc (sizeof(uint64_t));
*tmp = i;
g_hash_table_insert(hash, (gpointer) (tmp), (gpointer) tmp);
}
但這代碼運行了超過10分鐘:
我輸入鍵m->s
的
for (i = 0; i < meta->n_kmers; i++) {
m = g_ptr_array_index(kmer_list, i);
tmp = (uint64_t*) malloc (sizeof(uint64_t));
*tmp = m->s;
g_hash_table_insert(hash, (gpointer) (tmp), (gpointer) tmp);
}
大部分是用〜60位。
我認爲你的用例有點超過了GHashTable的「舒適」設計大小......它甚至沒有提供一個大小的構造函數,這將有助於減少重新分配的次數它肯定會在你的情況下做。 – unwind 2013-03-27 14:48:38
@unwind是否有更高效率的替代庫/代碼?我不想自己寫。 – Joy 2013-03-28 08:07:23