Compact框架中缺少表達式樹已經困擾了我一段時間,但我沒有真正尋找解決方案。Compact框架中的Linq表達式樹
今天,我發現了一篇有關在Mono System.Core之上構建的替代System.Linq.Expressions的博客文章,由db4o(你可以找到它here)。
我的問題是 - 你有沒有使用過這個庫,如果有的話,你有什麼經驗(特別是關於性能)?
Compact框架中缺少表達式樹已經困擾了我一段時間,但我沒有真正尋找解決方案。Compact框架中的Linq表達式樹
今天,我發現了一篇有關在Mono System.Core之上構建的替代System.Linq.Expressions的博客文章,由db4o(你可以找到它here)。
我的問題是 - 你有沒有使用過這個庫,如果有的話,你有什麼經驗(特別是關於性能)?
對於LINQ to db4o,System.Linq.Expressions工作得很好。它可能不會成爲查詢非LINQ到對象源的Compact Framework應用程序的瓶頸。
如果你只是用它做一些元編程,使用Compile反覆使用,它的性能不如桌面,因爲它基本上是一個基於反射的解釋器。對於它的價值,解釋器通過了表達式樹的完整Mono測試套件(這是相當的後果)。
唯一知道它的bug與a missing feature of the Compact Framework BCL有關,使得當涉及到通用字段時,csc不可能發出正確的表達樹。
這並不直接回答你的問題,但你可能會覺得它很有趣。 IronPython和IronRuby附帶System.Linq.Expressions的.NET 4.0實現的源代碼。他們也有Linq/DLR Expression Trees的解釋器。 Tomáš Matoušek能夠使用此解釋器使IronRuby在Windows Phone模擬器上工作。
我沒有看到這一點,除非他們最終得到'System.Reflection.Emit'在'緊湊'設備上工作。 – leppie 2010-06-21 11:24:23
@leppie:好的,關鍵是在Compact Framework上有基於表達式的LINQ查詢。這樣,開發人員仍然可以使用LINQ來編寫它的查詢,並且db4o可以將基於LINQ查詢的表達式轉換爲其基礎查詢機制。對於db4o無法優化表達式的情況,解釋表達式以規避缺少SRE。 – 2010-07-08 22:14:54