1

如果我比较两种已知的值类型,我会从C# 中的|or运算符获得更好的性能吗?||

我的特定用例是bool类中的一个成员,指示过时的数据,被这样的循环方法激活:

private bool _stale;
private HashSet<Foo> _foos;

然后另一个方法循环并可能激活此标志

foreach (var foo in foos)
{
    _stale = _foos.Add(foo) | _stale;

    //Or is the following line better?
    //_stale = _foos.Add(foo) || _stale; 
}

我想我在问短路运算符的开销是否足够我不会用它来检查已经分配的值类型......

4

1 回答 1

4

我会使用Or 赋值运算符

_stale |= added;

或者:

_stale |= _foos.Add(foo);

该运算符是专门为此目的而设计的,这使意图变得清晰(并且很可能在性能方面是最好的,因为它是专门为此目的而设计的)。

至于实际性能,这种微优化级别通常几乎无法衡量,因为任何性能差异都将远小于操作(HashSet<T>.Add调用)的差异,因此代码的清晰度更为重要。您可以构建一个测试来衡量这一点,但在性能方面不太可能存在足够可靠的差异。

于 2013-10-22T22:34:24.337 回答