2010-06-10 61 views
10

Compact框架中缺少表达式树已经困扰了我一段时间,但我没有真正寻找解决方案。Compact框架中的Linq表达式树

今天,我发现了一篇有关在Mono System.Core之上构建的替代System.Linq.Expressions的博客文章,由db4o(你可以找到它here)。

我的问题是 - 你有没有使用过这个库,如果有的话,你有什么经验(特别是关于性能)?

+0

我没有看到这一点,除非他们最终得到'System.Reflection.Emit'在'紧凑'设备上工作。 – leppie 2010-06-21 11:24:23

+1

@leppie:好的,关键是在Compact Framework上有基于表达式的LINQ查询。这样,开发人员仍然可以使用LINQ来编写它的查询,并且db4o可以将基于LINQ查询的表达式转换为其基础查询机制。对于db4o无法优化表达式的情况,解释表达式以规避缺少SRE。 – 2010-07-08 22:14:54

回答

2

对于LINQ to db4o,System.Linq.Expressions工作得很好。它可能不会成为查询非LINQ到对象源的Compact Framework应用程序的瓶颈。

如果你只是用它做一些元编程,使用Compile反复使用,它的性能不如桌面,因为它基本上是一个基于反射的解释器。对于它的价值,解释器通过了表达式树的完整Mono测试套件(这是相当的后果)。

唯一知道它的bug与a missing feature of the Compact Framework BCL有关,使得当涉及到通用字段时,csc不可能发出正确的表达树。

2

这并不直接回答你的问题,但你可能会觉得它很有趣。 IronPythonIronRuby附带System.Linq.Expressions的.NET 4.0实现的源代码。他们也有Linq/DLR Expression Trees的解释器。 Tomáš Matoušek能够使用此解释器使IronRuby在Windows Phone模拟器上工作。