linq到Db4o没有使用索引

时间:2010-02-12 16:25:46

标签: linq performance db4o

我正在尝试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();

使用本机API的相同请求(响应时间为28ms):

var query = repo.ObjectContainer.Query();
query.Descend("MyTest");
query.Descend("MyInt").Constrain(6500)

有人能告诉我linq到db4o有什么问题吗?

由于

1 个答案:

答案 0 :(得分:9)

我假设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();