在 C# 中,绝对最好使用 Linq。原生查询经常无法优化,这将导致 db4o 水合所有对象并实际调用实例化对象上的 lambda 表达式。这只不过是对 linq-to-objects 的自动回退,相比之下它非常慢。仅仅为 6 万个典型物体补水就需要几秒钟。
提示:决不能调用 lambda 表达式上的断点。
即使使用Db4oTool.exe优化本地查询作为构建后步骤,在域对象中使用属性或自动属性时,即使是简单的查询也会导致问题。
linq 提供者总是给我最好的结果。它具有最简洁的语法并且它的优化工作。此外,linq 提供程序非常完整,只是它可能比您预期的更频繁地回退到 linq-to-objects。
此外,linq 提供程序在项目文件夹中具有某些 dll 也很重要。这些取决于版本。如果您使用的是 builds >= 14204,请确保Mono.Reflection.dll在您的 app 文件夹中。
对于旧版本,必须存在以下所有内容:
Db4obects.Db4o.Instrumentation.dll
Db4objects.Db4o.NativeQueries.dll
Mono.Cecil.dll
Cecil.FlowAnalysis.dll
请注意,对于本机查询,即使在较新的版本中,这些仍然是必需的。