我意识到结构是不可变的,变异结构是邪恶的,改变结构中的值的正确方法是创建新实例。但是,我不清楚新实例与允许结构可变的内存和性能方面/问题。
假设我有结构,
struct Vehicle
{
public readonly int Number;
public readonly double Speed, Direction;
public Vehicle(int number, double speed, double direction)
{
this.Number = number;
this.Speed = speed;
this.Direction = direction;
}
}
并将其创建为:
Vehicle car;
也
Vehicle plane = new Vehicle(1234, 145.70, 73.20)
如果我需要稍后分配给 Number、Speed 或 Direction,我可以删除 readonly 并使结构可变 - 我知道这样做很糟糕。- 从而“变异”一个已经创建的结构值。
或者,我可以创建一个新的结构实例。所以不要说 car.Speed = 120.7; 我可以说 car = new Vehicle(car.Number, 178.55, car.Direction);。这将创建一个新的结构值,几乎就像旧值一样,只是速度发生了变化。但它不会改变现有的结构值。
这是问题所在。假设,作为一个极端的例子,我需要每秒更新数万次速度和/或方向。我认为创建这么多实例会严重影响内存和性能,在这种情况下,最好允许结构是可变的。
谁能澄清可变结构的内存和性能问题与在这种极端情况下实现结构的正确方法?