c# - 哪个最适合数据存储结构/类?

标签 c# class struct

我们已经在 SO 中看到很多关于 C# 中的类与结构的讨论。大部分以结论说它是一个堆/栈内存分配结束。并建议在小型数据结构中使用结构。

现在我有一个情况可以在这两个选项中决定简单的数据存储。目前在我们的应用程序中,我们有数千个类,只是充当简单的数据存储(仅公开的公共(public)字段),它们在不同的模块和服务之间传递。

根据我的理解,出于性能原因,我觉得最好继续使用结构而不是类。因为这些是简单的数据结构,仅充当数据存储。

在继续之前,我需要一些经历过这场斗争的人的专家建议。

  • 我的理解正确吗?
  • 我看到大多数 ORM 都有类作为数据存储。所以我怀疑应该有理由继续使用类而不是结构。那会是什么?

最佳答案

我会根据以下标准做出选择

  • 引用类型与值类型语义。如果 2 个对象只有当它们是同一个对象时才相等,则表示引用类型语义 => 类。如果其成员的值定义了相等性(例如,如果两个 DateTime 表示相同的时间点,即使它们是 2 个不同的对象,则 2 个 DateTime 是相等的),值类型语义 => struct
  • 对象的内存占用。如果对象很大并且经常分配,将其设为结构会更快地消耗堆栈,因此我宁愿将它作为一个类。相反,我宁愿避免对小值类型的 GC 惩罚;因此使它们成为一个结构。
  • 你能让这个对象不可变吗?我发现结构非常适合“值(value)对象”——来自 DDD 一书。
  • 您是否会根据此对象的使用情况面临一些装箱-拆箱惩罚?如果是,就去上课。

关于c# - 哪个最适合数据存储结构/类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1951186/

相关文章:

c# - .NET 唯一对象标识符

c# - 不支持 WPF 调用脚本?

c# - 在 JS 中访问 Asp.Net Session 变量

java - 为什么这个教科书程序无法识别我的 Point2D 对象?

c++ - 从另一个类访问类信息而不传递它

java - 子类/接口(interface)和父类(super class)之间的转换

C++ 成员函数

无法确定段错误的原因

C#:我应该使用 out 还是 ref 来取回这个结构?

c# - 在 ICollection<Tuple<T1,T2>> 上实现 .Contains() 的最简单方法