2010-06-18 24 views
3

我有一個具有以下簽名的方法:Mono的PropertyInfo.GetValue()的替代品?

private object GetNestedObject<y>(y objToAccess, string nestedObjectName) 

我使用反射來獲取從objToAccess的nestedObject並將其返回。

這很好,除非它真的很慢(我必須這樣做幾十萬次)。 我遇到過HyperDescriptor,但由於我在Linux上運行這個,Mono不支持TypeDescriptionProviders,所以我無法使用它。

在這種情況下是否有任何替代方法使用getValue?我總是可以對每種類型的覆蓋進行硬編碼,但這是不可取的,並且會增加很多維護開銷。

+0

順便說一句,我緩存propertyInfo,並提供了一個小的速度提升。 – TriArc 2010-06-18 14:40:17

回答

0

我不確定Mono是否支持它,但對於這種情況(在高負載代碼中使用Reflection),我通常使用System.Reflection.Emit動態生成特殊訪問類。他們需要更長的時間才能生成,但在此之後,訪問速度非常快。

0

你必須使用魔術字符串嗎?另一種選擇是通過將lambda表達式寫入代碼或使用表達式樹生成成員訪問lambda表達式來傳入lambda表達式。如果你使用sxpression樹的路由,你可以很容易地編譯表達式並緩存它們以供使用。