0

我通过光标遍历 BTree(来自文档的示例

见下面的代码:

 kkey_t* p2;  // the type kkey_t is some struct
 int counter=0;
 BDBCUR *cur = tcbdbcurnew(bdb);
 tcbdbcurfirst(cur);
 while((p2 = (kkey_t*)tcbdbcurkey(cur, &len )) != NULL){ 
    printf("%u.%u\t%u\n",p2->type, p2->key, counter);
    free(p2);
    res = tcbdbcurnext(cur);
    if (!res) break;

    counter++;    
 }

我得到了 562 418 条记录 tcbdbrnum(),但我有循环,其中counter超过 150 000 000 甚至更多......我没有循环完成。

可以是什么问题?

我发现循环大小为 150652 cylses,循环偏移量接近 1.3 * 150652 所以,我将文件增加到 1 042 638 个键,并且我有 loopsize = 280299 比率 recsize / loopsize = 3,73 ...

做什么,有unlooping?为什么我有循环?

所有密钥都是随机的,大小为 64 位(8 字节)。可以删除一些键。

4

0 回答 0