私のアプリケーションでは、Glib GHashTableインスタンスをディスクに保存し、後でメモリにロードする必要があります。しかし、インスタンスを直接ダンプする方法が見つかりません。
オプションは、GHashTableを直接保存するのではなく、エントリを次々に保存することです。ロードするときは、エントリを1つずつロードし、新しいハッシュテーブルに挿入します。しかし、この操作を実行するには時間がかかることがわかりました。
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ビットです。