.net - 是否有更快的方法使用反射访问类的属性成员?

标签 .net reflection

我当前正在使用以下代码通过反射访问对象的属性:

 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/

相关文章:

asp.net - 将参数传递到 ASP .NET 页面

.NET 程序集和 DLL rebase

c# - String.Split 与字符串?

.net - AWS DotNetCore Lambda - 一个解决方案中的多个项目

c# - 列出使用 Mono.Cecil 调用方法的所有引用

c# - C#中将json文件反序列化为静态类

c# - 没有数据的IEnumerable

java - Java 中的 getGenericSuperclass()。它是如何工作的?

c++ - 如何向 C++ 应用程序添加反射?

c# - 使用运算符 <、<= 等测试两个对象