簡體   English   中英

反射:使用委托設置通用對象的屬性

[英]Reflection: Set a property of a generic object using delegates

我正在開發一個簡單的ORM庫,實際上非常簡單...

我有一個T型查詢

public IEnumerable<T> Query<T>(string query)

該方法采用T類,它獲取屬性,遍歷它們並相應地設置它們

aProperty.SetValue(tmpGenericObjectOfTypeT, newValue, null);

我的問題是SetValue的運行速度非常慢,我看到了兩個選擇,即使用Reflection.Emit或使用委托,但是我不知道如何執行其中的任何一種。

正如我所讀的,使用委托有點優雅,我想要那種解決方案,但是我真的不知道該怎么做,我搜索並發現了很多關於如何使用委托調用方法的知識,而不是如何設置屬性...

知道如何獲取/設置屬性的動態方法表達式樹是解決問題的方法。 快速簡便。

  • 使用反射檢查您的類型的界面
  • 構建getter / setter Actions/Funcs並將其緩存在將它們與原始類型相關聯的對象中。
  • 在后續操作中使用了緩存的獲取器/設置器。

與反射相比,您應該至少看到20倍的性能提升(如果不是50-100倍,則更多)。

HyperDescriptor效果很好(基於ReflectionEmit)。 http://www.codeproject.com/Articles/18450/HyperDescriptor-Accelerated-dynamic-property-acces

“委托”方法可能是指表達式樹?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM