db4o字段已索引,但未在查询中使用

时间:2010-08-04 14:58:10

标签: c# compact-framework db4o

我有一个Guid为字段public Guid _id的简单对象,此字段已编入索引。

config.Common.ObjectClass(typeof(ConfigurableObject))
      .ObjectField("_id").Indexed(true);

当我在ObjectManager Enterprise中打开数据库文件时,它会显示该字段已编入索引!

但是我的疑问很慢。最多需要5个!!秒,数据库中只有大约50个对象。

以下是查询:

private void FindObject<T>(T toFind) where T : ConfigurableObject {
    var query = HeatingSystem.Instance.GetObjectContainer().Query();
    query.Constrain(typeof(T));
    query.Descend("_id").Constrain(toFind._id);

    IObjectSet result = query.Execute();

    /*IList<T> result = HeatingSystem.Instance.GetObjectContainer().Query<T>(
        delegate(T cobj) {
            return cobj._id == toFind.Guid;
        }
    );*/
}

本机和SODA查询都很慢。

当我添加

config.Common.Diagnostic.AddListener(
   new Db4objects.Db4o.Diagnostic.DiagnosticToConsole());

它说“考虑索引你要查询的字段。”
和:“无法从字段索引加载查询候选集”

我正在使用db4o 7.12.132.14217 for Compactframework 2.0

编辑:
具有模具Guid字段的类:

public abstract class ConfigurableObject {
    private string _description;
    public Guid _id;
}

这是完整的配置

public static IEmbeddedConfiguration ConfigDb4O() { 
    IEmbeddedConfiguration config = Db4oEmbedded.NewConfiguration();
    config.Common.OptimizeNativeQueries = true;

    config.Common.ObjectClass(typeof(ConfigurableObject)).ObjectField("_id").Indexed(true);
    config.Common.ObjectClass(typeof(ConfigurableObject)).StoreTransientFields(false);

    return config;
}

我用以下内容创建/打开数据库:

IObjectContainer db = Db4oEmbedded.OpenFile(ConfigDb4O(), "foo.db4o");

0 个答案:

没有答案