我们已经在 SO 中看到很多关于 C# 中的类与结构的讨论。大部分以结论说它是一个堆/栈内存分配结束。并建议在小型数据结构中使用结构。
现在我有一个情况可以在这两个选项中决定简单的数据存储。目前在我们的应用程序中,我们有数千个类,只是充当简单的数据存储(仅公开的公共(public)字段),它们在不同的模块和服务之间传递。
根据我的理解,出于性能原因,我觉得最好继续使用结构而不是类。因为这些是简单的数据结构,仅充当数据存储。
在继续之前,我需要一些经历过这场斗争的人的专家建议。
- 我的理解正确吗?
- 我看到大多数 ORM 都有类作为数据存储。所以我怀疑应该有理由继续使用类而不是结构。那会是什么?
最佳答案
我会根据以下标准做出选择
- 引用类型与值类型语义。如果 2 个对象只有当它们是同一个对象时才相等,则表示引用类型语义 => 类。如果其成员的值定义了相等性(例如,如果两个 DateTime 表示相同的时间点,即使它们是 2 个不同的对象,则 2 个 DateTime 是相等的),值类型语义 => struct
- 对象的内存占用。如果对象很大并且经常分配,将其设为结构会更快地消耗堆栈,因此我宁愿将它作为一个类。相反,我宁愿避免对小值类型的 GC 惩罚;因此使它们成为一个结构。
- 你能让这个对象不可变吗?我发现结构非常适合“值(value)对象”——来自 DDD 一书。
- 您是否会根据此对象的使用情况面临一些装箱-拆箱惩罚?如果是,就去上课。
关于c# - 哪个最适合数据存储结构/类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1951186/