c# - 用于比较值类型的短路运算符的.Net 性能?

标签 c# .net optimization conditional-statements short-circuiting

如果我比较两个已知的值类型,我会从 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/

相关文章:

mysql - 如何针对 LIKE '%abc%' 查询优化包含 1.6+ 万条记录的 MySQL 表

c# - 从字符串源列表动态生成最短正则表达式

c# - 使用 C# 以编程方式更新 MS Access 数据库中的链接表

c# - 检测是否从 P/Invoke 调用

c# - DotNetZip 卡住我的应用程序?

c# - 是否有类似于 Twitter Bootstrap/Foundation5 的实用程序用于 Visual Studio 中的 WPF 文件?

python - 为什么这个与门神经网络没有朝着最佳权重方向发展?

php - 我该如何优化这个简单的脚本?

c# - 使用 iTextSharp 和 C# 自动调整表格列宽

c# - C#创建文件时可以指定文件版本吗?