5

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

这是我的配置:

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

这是我要保存的对象:

public class MyTest
{
    public int MyInt;
}

这是我使用 linq to db4o 的代码(响应时间 650 毫秒):

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

以及使用原生 API 的相同请求(响应时间 28 毫秒):

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

有人可以告诉我 linq to db4o 有什么问题吗?

谢谢

4

1 回答 1

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();
于 2010-02-13T15:19:47.797 回答