我通过光标遍历 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 字节)。可以删除一些键。