Может быть, вы столкнулись с ограничением db4o’s query-optimization. Обычно исходные запросы и LINQ-запросы переводятся на низкий уровень SODA-query. Когда эта оптимизация завершается неудачей, db4o создает экземпляры объектов в базе данных для выполнения запроса. Как вы можете себе представить, это может быть довольно медленным.
Лучшим решением в настоящее время является использование SODA непосредственно для этого случая. Например, класс с одним свойством:
public class SimpleObject
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
Уроженец запрос, как это:
var result = db.Query<SimpleObject>(x => x.Name.StartsWith ("Chr",StringComparison.CurrentCultureIgnoreCase));
Может быть представлен этим натриево-запроса:
IQuery query = db.Query();
query.Constrain(typeof (SimpleObject)); // restrict to a certain class
query.Descend("name").Constrain("Chr").StartsWith(false); // the field 'name' starts with 'chr', case-insensitive
foreach (var s in query.Execute())
{
//
}
Я надеюсь, что в будущих версиях Query-Optimizer поддерживает этот случай напрямую.
Откуда «смешно»? –
D'oh, копия и прошлая ошибка, я исправил ее. Исходный пример использовал «funny» как search-term;) – Gamlor
кто вы Gamlor .. вы ответили на несколько вопросов Db4o, которые я опубликовал: D очень благодарен. Прежде чем вы отправили это сообщение, я действительно переместил свой код на запрос SODA, который сделал его 10000000x быстрее .. это была просто боль, полная перемещение к IList, а не IList <> .. В документе doc it stats Linq-запросы переводятся в SODA. Может быть, есть исправление для этой проблемы в переводе выражения. Может быть, посмотрите, могу ли я исправить это и внести некоторые изменения: D спасибо за помощь, которую ребята высоко ценят –