在我的应用程序中,我需要将Glib GHashTable 实例保存到磁盘中,然后再加载到内存中。但我找不到任何直接转储实例的方法。
一种选择是不直接保存 GHashTable,而是一个接一个地保存条目。加载时,逐一加载条目,并插入到新的哈希表中。但是我发现执行这个操作需要很多时间:
g_hash_table_insert(hash, (gpointer) (mer_v), (gpointer) m);
加载 6000 万个条目大约需要 20 分钟。如果我只是加载条目而不执行插入,则只需 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 多分钟:
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);
}
我的大部分输入键m->s
都有约 60 位。