【问题标题】:What is the fastest way to get values of properties from an unknown object?从未知对象获取属性值的最快方法是什么?
【发布时间】:2011-05-16 14:02:34
【问题描述】:

我正在使用反射从未知对象中获取属性值。我总是在运行时知道未知对象的属性。所以,我只想从该对象中获取这些属性的值。反射对我有用,但我有性能问题。

有没有其他方法可以有效地实现这一目标?我们可以使用序列化吗?有什么开箱即用的方法吗?

【问题讨论】:

  • 我希望您在使用 dynamic 关键字 (C# 4.0 / .NET 4.0) 时可以显着提高性能。
  • 您的问题很奇怪,因为您提到了一个未知对象,其属性始终是已知的。有没有办法解决这种不匹配?如果没有,您确定您确实有性能问题,还是只是在实际分析之前担心?
  • dynamic 只有在编译时知道属性/方法的名称时才有效!
  • 另外,dynamic 不会自动更快,它可能(可能)比使用反射慢。使用动态会增加加载时间和内存消耗。测试和配置文件!
  • @dlev - 实际上,我有一个 xml 文件,其中包含每个对象的属性,因此我可以轻松获取这些属性。不,我没有分析它。

标签: c# serialization reflection deserialization


【解决方案1】:

前段时间我实现了一个使用Delegate.CreateDelegate的属性访问机制,似乎比简单的反射更快。你可以找到它on GitHub

【讨论】:

    【解决方案2】:

    如果您始终知道属性并且可以修改“未知”对象,则让每个未知对象实现一个公共接口。这样您就可以将对象类型转换为您定义的接口并直接调用属性。

    如果你不能直接修改对象并且它们没有被密封,你可以从对象派生一个类并将其标记为实现接口,你仍然可以去。

    此外,您对反射的性能问题不一定排除使用它。运行您自己的时序研究,看看性能下降是否真的值得担心。

    如果您确实使用反射并且对多个属性感兴趣,则最好调用一次 GetProperties 并循环查找所需的属性,而不是多次调用 GetProperty。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      • 2021-08-30
      • 2023-03-23
      • 2021-08-03
      相关资源
      最近更新 更多