存储方法返回或重复调用?

Kyl*_*ait 1 c# optimization

如果我要多次访问一个函数的函数,例如myString.SubString(5,5),我会看到两个选项.

  1. 我这样做,称之为(让我们说)三次.
  2. 我存储为字符串tempString = myString.SubString(5,5)并使用tempString三次.

假设这是函数的一部分我最终在一帧中调用了一百万次,如果是1,我使用的cpu比情况2更多?是的?

然而,在情况2中,我创建了一个局部变量数百万次并且使用更多内存,直到收集垃圾可能是下一帧.

我使用的是一个非常小的例子,但在一般情况下如果一个比另一个更好,我当然可以预见到做出正确选择会影响性能的时间.

是否一个案例选择使用更多的内存或更多的CPU,一种做法通常比另一种更好?

ang*_*son 6

您似乎对对象分配和局部变量的差异感到困惑.

首先让我们来处理基础知识.如果你调用string.SubString它并返回少于原始字符串,那么它将创建一个新的字符串对象.每次.我希望它返回原始字符串,如果你给它索引等,以便返回整个字符串,但这在这里是无关紧要的.

所以每次都会创建一个新对象:

myString.SubString(5,5)
Run Code Online (Sandbox Code Playgroud)

现在,如果将此新对象存储到局部变量中,您唯一要做的就是开始控制该对象的生命周期.它可能会或可能不会对垃圾收集器何时收集此新字符串对象产生影响,但这绝不会创建额外的对象,您只是将已创建的对象引用存储到本地变量中.

是的,局部变量占用空间,但是如果你Substring在表达式中使用该调用的结果,那么无论如何都会创建类似于局部变量的东西,它只是在幕后为你做的编译器.

因此,如果你在循环中做某事,并且每个循环迭代将需要这个子串3次,那么肯定,将它存储在变量中以避免2个额外的对象分配以及与2次额外调用相关的成本Substring.