紧凑框架中的Linq表达式树

10

缺乏表达式树一直困扰着我在Compact Framework中编程,但我并没有真正寻找解决方案。

今天,我发现了一篇关于在Mono System.Core之上构建的可替代System.Linq.Expressions的博客文章,例如db4o中使用的(您可以在这里找到它)。

我的问题是-您是否使用过此库,如果使用过,您对其使用体验如何(尤其是性能方面)?


我不明白这有什么意义,除非他们最终让 System.Reflection.Emit 在“紧凑型”设备上运行。 - leppie
1
@leppie:重点是在紧凑框架上拥有基于表达式的LINQ查询。这样,开发人员仍然可以使用LINQ编写其查询,而db4o可以将基于表达式的LINQ查询转换为其底层查询机制。对于无法通过db4o进行优化的表达式,将对其进行解释,以规避缺乏SRE的问题。 - Jb Evain
2个回答

2

这并不直接回答你的问题,但你可能会发现它很有趣。 IronPythonIronRuby 包含了 .NET 4.0 实现 System.Linq.Expressions 的源代码。它们还使用一个解释器来处理 Linq/DLR 表达式树。通过这个解释器,Tomáš Matoušek 成功地让 IronRuby 在 Windows Phone 模拟器上运行。


2
对于LINQ to db4o,System.Linq.Expressions非常有效。它很可能不会成为一个查询非LINQ对象源的紧凑框架应用程序的瓶颈。
如果你只是用它来进行一些元编程,反复使用Compile,那么它在性能上就不如桌面上的表现好,因为它基本上是一个基于反射的解释器。值得一提的是,这个解释器通过了Expression Trees的完整Mono测试套件(相当严格)。
唯一已知的错误与紧凑框架BCL的缺失功能有关,使得csc无法在涉及通用字段时发出正确的表达式树。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接