В C # определенно лучше использовать Linq. Собственные запросы часто не оптимизируются, что приводит к тому, что db4o гидратирует все объекты и фактически вызывает лямбда-выражение для экземпляра объекта. Это не что иное, как автоматический откат к linq-to-objects, и он чертовски медленный по сравнению. Простое увлажнение 60 000 наших типичных объектов занимает несколько секунд.
Подсказка : Никогда нельзя вызывать точку останова в лямбда-выражении.
Даже при использовании Db4oTool.exe
для оптимизации собственных запросов в качестве шага после сборки даже простые запросы приводят к проблемам при использовании свойств или авто-свойств в объектах домена.
Поставщик linq всегда давал лучшие результаты для меня. У него самый лаконичный синтаксис, и его оптимизации работают. Также поставщик linq очень полон, только он может обращаться к linq-to-objects чаще, чем вы ожидаете.
Также важно, чтобы у провайдера linq были определенные dll в папке проекта. То, что это, зависит от версии немного. Если вы используете сборки> = 14204 , убедитесь, что Mono.Reflection.dll
находится в папке вашего приложения.
Для более старых версий должно присутствовать все следующее:
Db4obects.Db4o.Instrumentation.dll
Db4objects.Db4o.NativeQueries.dll
Mono.Cecil.dll
Cecil.FlowAnalysis.dll
Обратите внимание, что для собственных запросов они все еще требуются даже в более новых сборках.