C#:我应该使用或参考这个结构吗?

Ed *_*rty 4 c# performance struct

我不确定问这个问题的最好方法,所以我先从一个例子开始:

public static void ConvertPoint(ref Point point, View fromView, View toView) {
    //Convert Point
}
Run Code Online (Sandbox Code Playgroud)

这个调用是递归的.你传入一个点,它相对于它fromView是相对的toView(只要一个是另一个的祖先).

该调用是递归的,一次将该点转换为一个级别.我知道,可变结构是坏的,但我使用可变点的原因是我只需要创建一个单点并将其传递给递归调用,这就是为什么我使用ref.这是正确的方法,还是使用out参数更好,或者只是声明方法返回一个点?

在这些情况下,我不太熟悉如何处理结构体而不是类.这是从Java移植的代码,其中显然必须是一个类,因此有意义的是反复使用相同的临时点而不是创建一个必须在每次调用时被垃圾收集的新点.

这可能是一个令人困惑的问题,并且为了更多的混乱而堆积起来,当我在它时,我应该保留一个临时静态Point实例以进行快速转换,或者只要在调用此方法时创建新点就这么简单(它被称为很多)?

Han*_*ant 8

在处理诸如Point之类的短期对象时,对于垃圾收集器的烦恼绝不是一个错误,假设它实际上是一个类.鉴于这是C#,它可能是一个结构,不超过16个字节.在这种情况下,您应该始终编写返回Point的方法.这在运行时得到优化,结构适合cpu寄存器.

只有在它们很大时才考虑通过ref传递结构.

  • *“只有当结构很大时才考虑通过 ref 传递结构。”*“大”有多大? (2认同)