【问题标题】:Performance of anonymous types in C#C# 中匿名类型的性能
【发布时间】:2014-02-28 05:01:19
【问题描述】:

C# 中使用匿名类型是不是很糟糕?

【问题讨论】:

标签: c# .net


【解决方案1】:

不,不是。它们是在编译时生成的代码类,性能与普通类一样。

【讨论】:

    【解决方案2】:

    就性能而言,它们与其他类型一样。

    编辑

    为了更清楚,我应该说它们的性能与其他类型完全相同,因为它们与其他类型完全相同,除了编译器生成名称这一事实。性能受到影响的唯一方法是将匿名类型的实例传递到另一个范围,其中必须使用反射或 dynamic 来访问属性。这会很昂贵,因为它涉及后期绑定以在运行时解决所有问题。

    【讨论】:

      【解决方案3】:

      匿名类型本身不好吗?不。如果他们是 C# 团队,肯定不会浪费时间将其添加到语言中。在引擎盖下,它们只是编译成标准的 CLR 类型。

      匿名类型是否可以像几乎所有其他语言功能一样被滥用到无法执行的程度。当然。

      【讨论】:

        【解决方案4】:

        C# 中的匿名类型仍然是静态类型,访问其方法和属性由编译器解析。性能与显式类型相当。

        【讨论】:

        • @Steven Sudit:CLI 中不存在匿名类型。事实上,C# 中的匿名类型只是虚构的:它们实际上就像任何其他类型一样被命名,因为这是 CLI 支持的唯一类型。唯一的区别是他们的名字是由随机数生成器而不是人类生成的。所以,是的,匿名类型的性能与命名类型相同,因为匿名类型命名类型。
        • @Jörg:谢谢你在这里拼写出来。如果你不介意,我会偷你的答案。
        • 匿名类型没有方法 ;-)
        • @macias:那你怎么称呼默认构造函数呢? :-)
        • @macias:是的,我也称它为构造函数,因为这是准确的描述。根据msdn.microsoft.com/en-us/library/ms173115.aspx,构造函数是方法,所以称它为方法也准确。
        【解决方案5】:

        还不错,有时很方便。例如,在使用 Linq 时,与其创建一个只会使用一次的类,不如使用匿名类型。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-17
          相关资源
          最近更新 更多