我通常使用的是这样的:转让前值得检查价值吗?
if(!variable.Equals(value))
{
variable = value;
}
我学会了做这一点,但我只是想知道,如果它是值得的。比较和分配的成本是多少?我猜这不是,但是C#以某种方式优化了将相同数据赋值给变量的操作?
由于
我通常使用的是这样的:转让前值得检查价值吗?
if(!variable.Equals(value))
{
variable = value;
}
我学会了做这一点,但我只是想知道,如果它是值得的。比较和分配的成本是多少?我猜这不是,但是C#以某种方式优化了将相同数据赋值给变量的操作?
由于
比较操作是用于CPU更硬和花费比分配操作多一点时间。
只有分配比单独比较更快,但如果variable
不等于value
您将执行两个操作 - 比较和分配 - 更多时间。
所以,没有比较分配将更快地执行即使variable
等于value
:
variable = value;
它可以通过值得仅当varible
值arleady value
,你想拥有超快速和优化的代码。但在我看来,利润将是 不明显。你应该使用variable = value;
,它会正常工作,代码会更清晰。
赋值操作本身非常便宜(快速)。解引用变量可能会很昂贵。例如,product[a.f() + 3].age = 2;
将执行大量计算以达到所需的age
的位置。在你的情况下,你在if
条件下执行相同的解除引用。所以,在分配之前,在测试中根本没有优势。比较的意思是“减法和检查零标志”),并且涉及从存储器中读取变量的值,赋值意味着将值写入内存,读写内存是等价的。据我所知,编译器不使用这种优化技巧。
我猜猜该作业更快 – Candide
@KaeL对于属性很明显,因为INotifyPropertyChanged的相当常见的实现你不想引发不必要的事件,这个问题有点不同 – Qerts