使用可为空的结构是否可以提高性能

本文关键字:是否 结构 高性能 | 更新日期: 2023-09-27 18:04:39

我在想以下几点:

由于结构可以提高 GC 性能,并且Nullable<T>本身就是结构体,因此使用可为空的结构而不是类在性能(GC 性能或整体(方面会更好吗?

有人对此有经验吗?

编辑:

例如:我更多地考虑为方法调用创建一个选项类/结构:ConvertToPdf(..., MyType options) .因此,不是具有许多方法或类似方法的超大结构。

使用可为空的结构是否可以提高性能

No.

structs..作为值类型的基础,应该保持很小。类通常不会保持小,因此通过将类的所有用途替换为struct..实际上,您将创建较慢的运行时速度。因为值类型是完整复制的。

结构在语义上等效于用胶带粘在一起的一堆变量。 如果要创建一个结构

public struct MaybeValid<T>
{
  public T Value;
  public bool IsValid;
}

然后,MaybeValid<T>变量的Value字段可以像处理 T 类型的变量一样高效。 但是,框架的Nullable<T>不是这样定义的。 因此,通常需要将Nullable<T>Value复制到其他变量,然后才能对其进行任何操作。 使用Nullable<T>时所需的额外复制层意味着使用它的代码通常远不如使用其他类型的代码那么高效。

过早优化! - 考虑到这可能,因为您不会像将其包装在类中那样直接获得拳击,因此您可以将其设置为空。当然,假设使用结构是合适的 - 您确实倾向于看到很多成员很少的类,这些可能是目标。但是你不想像这样优化,直到你知道你需要,因为你只是一个凡人。