gpt4 book ai didi

c# - 多线程应用程序中的按位运算是否更慢?

转载 作者:太空宇宙 更新时间:2023-11-03 15:06:32 25 4
gpt4 key购买 nike

我想就多线程应用程序中的按位运算发表一些意见。一方面我知道按位运算非常快,但我也听说它会强制应用程序在处理可能导致实际性能下降的请求时使用单线程方法。

考虑以下代码:

public void Swap() {
var tempObject = new Vector2( y, x);
this.x = tempObject.x;
this.y = tempObject.y;
}

这里有几件事困扰着我。首先 - 我必须创建一个新对象。需要处理的对象。其次,我觉得将 y 然后 x 传递给构造函数可能会让程序员在查看这段代码时首先怀疑是否有拼写错误。尽管该代码非常简约,但您明白了。

我想将相同的方法重构为如下所示:

public void Swap() {
this.x ^= this.y;
this.y ^= this.x;
this.x ^= this.y;
}

好处是没有临时变量(尽管我知道 Unity 可以很好地处理这些变量而无需启动巨大的垃圾收集过程)。它也应该更快。代价是该方法的可读性较差;事实上,并不是每个程序员都知道按位命令和它们的作用,尽管从方法的名称中应该很明显。

但是真的更快吗?或者我只是停留在过去,更好的方法是实际创建一个临时变量以获得更好的性能?

最佳答案

您不需要创建新对象或进行花哨的二进制运算来交换两个变量。

public void Swap() 
{
var temp = x;
x = y;
y = x;
}

这里你有 0 个分配。 temp 值只是被压入堆栈,这不会给垃圾收集器带来压力。

关于c# - 多线程应用程序中的按位运算是否更慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43223744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com