我正在尝试db4o,使用linq到db4o时性能很差。 (使用7.12)

这是我的配置:

        var configuration = Db4oFactory.Configure();
        configuration.ObjectClass(typeof(MyTest)).ObjectField("MyInt").Indexed(true);

这是我要保存的对象:
public class MyTest
{
    public int MyInt;
}

这是我使用linq到db4o的代码(响应时间650ms):
var test = (from c in repo.ObjectContainer.Query<MyTest>()
                        where c.MyInt == 6500
                        select c).FirstOrDefault();

和相同的请求使用 native API(响应时间28ms):
var query = repo.ObjectContainer.Query();
query.Descend("MyTest");
query.Descend("MyInt").Constrain(6500)

有人可以告诉我linq to db4o怎么了吗?

谢谢

最佳答案

我假设repo.ObjectContainer-property是IObjectContainer-instance,对吗?

不使用索引的原因是,您实际上是在使用LINQ to Objects,而不是db4o-LINQ-Provider。

IObjectContainer.Query()方法从数据库中检索所有MyTest实例。然后,您在所有这些实例上运行LINQ to Object查询。因此,为什么不使用索引。

要解决此问题,请使用db4o-LINQ-Provider。确保已将Db4objects.Db4o.Linq.dll程序集添加到项目中。然后直接查询IObjectContainer-instance。像这样:

    var test = (from MyTest c in repo.ObjectContainer
                    where c.MyInt == 6500
                    select c).FirstOrDefault();

关于linq to Db4o不使用索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2253295/

10-17 01:59