如果我比较两个已知的值类型,我会从 c# 中的 |
或 ||
运算符获得更好的性能吗?
我的特定用例是类中的一个 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;
}
我想我是在问短路运算符的开销是否足以让我不使用它来检查已分配的值类型...
最佳答案
我会使用 Or Assignment operator :
_stale |= added;
或者:
_stale |= _foos.Add(foo);
这个运算符是专门为此目的而设计的,它使意图明确(并且很可能在性能方面是最好的,因为它是专门为此目的而设计的)。
至于实际性能,这种级别的微优化通常几乎无法衡量,因为性能上的任何差异都将远小于操作(HashSet<T>.Add
调用)上的差异,代码的清晰度重要得多。您可以构建一个测试来衡量这一点,但它不太可能在性能方面足够可靠地不同。
关于c# - 用于比较值类型的短路运算符的.Net 性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19529571/