Swift:以下哪一个代码在性能方面更好



我知道letvar更好,但我不确定以下哪一项是性能基础上的良好做法。

var edgeValue: Int
var edgeChars: String
var edgeColor: String
if directionUp {
edgeValue = -5
edgeChars = "x"
edgeColor = "red"
} else {
edgeValue = 5
edgeChars = "y"
edgeColor = "green"
}

let edgeValue = directionUp ? -5 : 5
let edgeChars = directionUp ? "x" : "y"
let edgeColor = directionUp ? "red" : "green"

最后一个更具可读性,它们是常量,但是如果我将来必须将directionUp更改为anotherCondition,那么我需要在所有行中更改它,并且它必须在每行运行时计算或检查directioinUp

我正在寻找这两个性能方面的最佳代码。

提前感谢您的所有答案和建议。

这两种解决方案最终都被编译为汇编代码,该汇编代码有多个步骤:

  • 内存分配
  • 复制这些值 L1、L2、...在中央处理器中
  • 比较 ...

汇编代码如下所示:

MOV AX,5h
MOV BX,5h
SUB AX,BX 
JZ EQUALS
JNZ NOTEQUALS
EQUALS:
MOV CL,'Y'
JMP PRINT
NOTEQUALS:
MOV CL,'N'
PRINT:
MOV AH,2
MOV DL,CL
INT 21H
RET

此解决方案看起来很优雅,但执行步骤比其他解决方案更多, 以directionUp三次为例进行比较。

let edgeValue = directionUp ? -5 : 5
let edgeChars = directionUp ? "x" : "y"
let edgeColor = directionUp ? "red" : "green"

Makelet, notvar

let edgeValue: Int
let edgeChars: String
let edgeColor: String
if directionUp {
edgeValue = -5
edgeChars = "x"
edgeColor = "red"
} else {
edgeValue = 5
edgeChars = "y"
edgeColor = "green"
}

只需在第一个代码片段中将var替换为let即可。您只初始化一次edgeValueedgeCharsedgeColor

有三个性能标准:

a( 计算速度

b( 使用内存量更少

c(任何开发人员都可以更快地阅读和理解代码(因此需要商业代码,大团队必须写下大项目并相互重新检查(

为了获得最快的性能,它是:

let edgeValue: Int
let edgeChars: String
let edgeColor: String
(edgeValue, edgeChars, edgeColor) = directionUp ? 
(-5, "x", "red") :
(5, "5", "green")

为了更快地使用代码(阅读和理解它(最好将所有这些数据连接到一个结构中:

struct Edge{
let value: Int
let chars: String
let color: String
}
let edge = directionUp ? 
Edge(value: -5, chars: "x", color: "red") :
Edge(value: 5, chars: "5", color: "green")

对于每次调用任何属性,此结构会占用额外的 4 字节内存和很少的处理器性能,但使用几个类似的结构比尝试记住每个类中的所有变量更舒服。

无论如何 - 如果此值不会更改 - 请使用 let,用于清除您的代码并禁止更改此值

最新更新