可以使用可空结构可以提高性能吗?

时间:2014-05-22 10:21:56

标签: c# performance struct garbage-collection

我在考虑以下事项:

因为,结构可以提高GC性能,Nullable<T>本身就是一个结构,在性能(GC性能或整体性能)方面使用可空结构而不是类更好吗?

有没有人经历过这个?

修改

例如:我正在考虑为方法调用创建选项类/结构:ConvertToPdf(..., MyType options)。所以,不是使用许多方法或类似的东西的超大结构。

3 个答案:

答案 0 :(得分:4)

没有

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

答案 1 :(得分:1)

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

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

然后,Value变量的MaybeValid<T>字段可以与T类型的变量一样高效地工作。但是,框架的Nullable<T>并未以这种方式定义。因此,在使用它完成任何操作之前,通常需要将Value Nullable<T>复制到其他变量。使用Nullable<T>时所需的额外复制层意味着使用它的代码通常不会像使用其他类型的代码那样高效。

答案 2 :(得分:0)

过早的优化! - 考虑到可能因为你没有直接装箱,因为你可以将它包装在一个类中,你可以使其成为可空的。当然假设使用结构是合适的 - 你往往会看到很多成员很少的类,这些可能是一个目标。但你不想在你知道自己需要的时候这样做,因为你只是一个凡人。