Yan*_*ann 5 linq performance db4o
我正在尝试db4o,并且在使用linq到db4o时性能不佳.(使用7.12)
这是我的配置:
var configuration = Db4oFactory.Configure();
configuration.ObjectClass(typeof(MyTest)).ObjectField("MyInt").Indexed(true);
Run Code Online (Sandbox Code Playgroud)
这是我想要保存的对象:
public class MyTest
{
public int MyInt;
}
Run Code Online (Sandbox Code Playgroud)
这是我使用linq到db4o的代码(响应时间650ms):
var test = (from c in repo.ObjectContainer.Query<MyTest>()
where c.MyInt == 6500
select c).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
使用本机API的相同请求(响应时间28ms):
var query = repo.ObjectContainer.Query();
query.Descend("MyTest");
query.Descend("MyInt").Constrain(6500)
Run Code Online (Sandbox Code Playgroud)
有人能告诉我linq到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();
Run Code Online (Sandbox Code Playgroud)