我一直试图让Berkeley数据库运行并运行我的C#项目。我从Oracle下载并构建了.NET版本。在大多数情况下,它的工作方式与我所期望的一样,并且像冠军一样表现。但是我遇到的一个问题与重复键有关。
首先,每当我尝试使用.putNoDuplicate方法时,即使密钥不是欺骗,它也会抛出错误。
db.PutNoDuplicate(k, v);
控制台上的输出显示“向DB-> put指定了非法标志”,并引发了一个错误代码为22的异常。异常本身不包含任何信息。
所以我想,好吧,也许这种方法有问题,我会自己做检查。我将代码更改为
if (db.Exists(k))
throw new System.Data.DataException("Duplicate key");
else
db.Put(k, v);
这样可行,但非常慢。作为参考,它仅在调用db.Put时几乎立即添加大约10,000条记录,但在执行上述db.Exists检查时减慢到大约每秒40条记录。那不可能是对的。
任何人都可以提供有关正在发生的事情的任何见解吗?谢谢!
编辑:所以我已经找到了部分内容。 db.Exists()检查的速度很慢,因为当函数返回false时,Berkeley-DB代码会定期抛出并在内部处理异常。当我运行代码的发布版本时,速度会恢复到我期望的状态。但我仍然想知道为什么putNoDuplicate调用首先失败了。