2010-06-10 39 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模擬器上工作。