【问题标题】:C#: Are struct members more performant?C#:结构成员的性能更高吗?
【发布时间】:2009-12-01 20:57:38
【问题描述】:

blog entry, Luca Bolognese 上思考这个关于结构与类作为成员字段的想法:

使用结构的原因是不 在 堆。这使得该解决方案成为 就像简单地编码一样“表现出色” 类本身的字段。或 至少我是这么认为的……

这有多准确?

首先,他不是说在上分配一个额外的对象吗?

而且,使用结构体不会以增加内存占用为代价略微减少分配时间(尤其是在类成员被延迟加载的情况下)吗?

在某些情况下,您会推荐这种结构优于类的做法吗?

【问题讨论】:

    标签: c# performance class struct


    【解决方案1】:

    我认为他确实是想写堆,他只是错误地写了栈。

    结构或类的问题经常出现。这是一个example。我认为最好遵循这个常见的建议:


    MSDN 有答案:Choosing Between Classes and Structures

    基本上,该页面会为您提供一个包含 4 项的清单,并说除非您的类型满足所有条件,否则使用一个类。

    除非类型具有以下所有特征,否则不要定义结构:

    * It logically represents a single value, similar to primitive types (integer, double, and so on).
    * It has an instance size smaller than 16 bytes.
    * It is immutable.
    * It will not have to be boxed frequently.
    

    您是否有时不应该遵循此建议?也许可以,但只有在您通过分析证明了这一点之后。

    【讨论】:

    • 谢谢马克-所以,扩展该列表中的最后一项:如果我需要经常使用/传递一个类的字段(从而取消装箱)该字段不应该是一个结构,是吗?
    • @JeffMeatballYang:值类型在且仅当它们被复制到引用类型(例如ObjectValueType、或任何接口类型)。如果将Rectangle 存储在List<Rectangle> 中,则不会有装箱。但是,如果将Rectangle 存储在List 中,则会出现装箱,因为后者需要将每个Rectangle 存储在Object 类型的位置中。虽然在某些情况下装箱是不可避免的,但一般来说,如果你对值类型进行装箱,你就做错了。
    猜你喜欢
    • 1970-01-01
    • 2014-08-03
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 2018-10-02
    • 1970-01-01
    相关资源
    最近更新 更多