我当前正在使用以下代码通过反射访问对象的属性:
Dim propInfo As Reflection.PropertyInfo = myType.GetProperty(propName)
Dim objValue As Object = propInfo.GetValue(myObject, Nothing)
我遇到了一些速度问题,因为这种类型的代码被多次调用并导致速度减慢。
我一直在研究使用 Refelction.Emit 或动态方法,但我不确定如何使用它们。
背景信息: 我正在创建对象属性子集的列表,然后与一些元信息相关联(例如它们是否可以从数据库或 xml 加载,如果它们是可编辑的,用户是否可以看到它们)。这是供以后使用的,因此我们可以编写如下代码:
foreach prop as BaseWrapper in graphNode.NodeProperties
prop.LoadFromDataRow(dr)
next
该应用程序大量使用对此列表的访问权限。问题在于,在项目的初始加载时,会创建大量使用此功能的对象,因此对于创建的每个对象,它会多次循环执行此代码。我最初尝试手动将每个属性添加到列表中,但这遇到了问题,即并非所有内容都在正确的时间初始化以及其他一些问题。
如果没有其他好的办法,那么我可能要重新思考一些设计,看看还能做些什么来提高性能。
最佳答案
您可以采取的几种方法:
- 使用
Expression Trees
。您可以将它们编译为委托(delegate)并缓存它们以供后续使用。 - 使用
Runtime C# Code Compilation
. - 不要采用这种方法。告诉我们您想要实现什么目标,有人可以提出更好的解决方案。
关于.net - 是否有更快的方法使用反射访问类的属性成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4512525/