C# 如何有效地从索引字段上排序的DB4O中检索每n个对象

C# 如何有效地从索引字段上排序的DB4O中检索每n个对象,c#,.net,db4o,C#,.net,Db4o,我在DB4O数据库中存储了很多事件。事件有时间戳,我已经为字段编制了索引。检索(枚举器)按时间戳排序的所有事件几乎不需要任何时间(因为它们没有被激活)。但是,如果我只想每10年退休一次呢。我可以循环,但接下来我必须做一个计数,这需要相当长的时间。即使从可枚举项返回FirstOrDefault()(是的,我在C#和LINQ中)也需要时间。如果字段被索引,那么在有序集中找到第一个字段不是很容易吗 是的,我没有很多使用DB4O的经验,但我编写的应用程序运行良好。通常,我会将数百万个事件推送到数据库,然

我在DB4O数据库中存储了很多事件。事件有时间戳,我已经为字段编制了索引。检索(枚举器)按时间戳排序的所有事件几乎不需要任何时间(因为它们没有被激活)。但是,如果我只想每10年退休一次呢。我可以循环,但接下来我必须做一个计数,这需要相当长的时间。即使从可枚举项返回FirstOrDefault()(是的,我在C#和LINQ中)也需要时间。如果字段被索引,那么在有序集中找到第一个字段不是很容易吗

是的,我没有很多使用DB4O的经验,但我编写的应用程序运行良好。通常,我会将数百万个事件推送到数据库,然后根据较短的时间跨度检索一些事件。一点问题都没有,应用程序的性能非常好。典型查询的响应时间小于100毫秒


现在我想检索所有事件的一个示例。每隔十分钟左右。。。我如何做到这一点?

您正在使用LINQ,知道吗?您确定查询不需要时间吗?因为LINQ查询是在您开始对其进行迭代时执行的。以前没有

还要注意,db4o现在不使用索引进行排序。这意味着对于庞大的结果集,排序将很慢

FirstOrDefault()已经花费了很多时间了?有两个原因。要么需要时间,因为查询是在那里执行的。或者是因为db4o需要时间。它是一个非常复杂的物体。我猜查询时间可能是个问题,因为您说过.Count()操作需要时间


现在你只想得到每10个物体。我相信.ElementAt()操作符还没有以优化的形式为db4o实现。这意味着它将激活其间的每个对象。在最新的db4o版本中,所操作的.Skip()不应激活其间的每个对象。因此,您可以跳到正确的位置,在那里使用use.FirstOrDefault()。

您正在使用LINQ,知道吗?您确定查询不需要时间吗?因为LINQ查询是在您开始对其进行迭代时执行的。以前没有

还要注意,db4o现在不使用索引进行排序。这意味着对于庞大的结果集,排序将很慢

FirstOrDefault()已经花费了很多时间了?有两个原因。要么需要时间,因为查询是在那里执行的。或者是因为db4o需要时间。它是一个非常复杂的物体。我猜查询时间可能是个问题,因为您说过.Count()操作需要时间


现在你只想得到每10个物体。我相信.ElementAt()操作符还没有以优化的形式为db4o实现。这意味着它将激活其间的每个对象。在最新的db4o版本中,所操作的.Skip()不应激活其间的每个对象。因此,您可以跳到正确的位置,使用那里的use.FirstOrDefault()。

我从未使用过.NET版本,但对于Java版本,ObjectSet(Query.execute返回的内容)实现了Java.util.List,它具有索引访问。在.NET版本中是否有类似的功能,还是太慢了?我从未使用过.NET版本,但在Java版本中,ObjectSet(这是Query.execute返回的内容)实现了Java.util.List,它具有索引访问权限。在.NET版本中是否有类似的功能,还是太慢了?