Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于比较值类型的短路运算符的.Net性能?_C#_.net_Optimization_Conditional Statements_Short Circuiting - Fatal编程技术网

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

C# 用于比较值类型的短路运算符的.Net性能?,c#,.net,optimization,conditional-statements,short-circuiting,C#,.net,Optimization,Conditional Statements,Short Circuiting,如果我比较两种已知的值类型,我会从c中的|或|操作符获得更好的性能吗 我的特定用例是类中的一个bool成员,表示过时的数据,由如下循环方法激活: private bool _stale; private HashSet<Foo> _foos; 我想我是在问短路运算符的开销是否足够,我不会用它来检查已分配的值类型…我会使用: 或: 该操作员是专门为此目的设计的,目的明确(并且很可能是性能最佳的,因为它是专门为此目的设计的) 至于实际性能,这种级别的微优化通常几乎不可能测量,因为性能上

如果我比较两种已知的值类型,我会从c中的
|
|
操作符获得更好的性能吗

我的特定用例是类中的一个
bool
成员,表示过时的数据,由如下循环方法激活:

private bool _stale;
private HashSet<Foo> _foos;
我想我是在问短路运算符的开销是否足够,我不会用它来检查已分配的值类型…

我会使用:

或:

该操作员是专门为此目的设计的,目的明确(并且很可能是性能最佳的,因为它是专门为此目的设计的)

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

或:

该操作员是专门为此目的设计的,目的明确(并且很可能是性能最佳的,因为它是专门为此目的设计的)


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

我不清楚msdn。
.Add()
是否保证执行?@Matthew每次都会执行。我知道这是一个微观优化。。。但是我可以在不牺牲清晰度的情况下“最佳地”做到这一点,也不需要付出太多的努力,那么为什么不呢?@Matthew好吧,牺牲清晰度是这里的关键——在这种情况下,我认为我在这里的选择是最清晰的版本,这就是为什么我更喜欢它;)我完全同意,+1。。。我以前从未使用过这个操作符。msdn我不清楚。
.Add()
是否保证执行?@Matthew每次都会执行。我知道这是一个微观优化。。。但是我可以在不牺牲清晰度的情况下“最佳地”做到这一点,也不需要付出太多的努力,那么为什么不呢?@Matthew好吧,牺牲清晰度是这里的关键——在这种情况下,我认为我在这里的选择是最清晰的版本,这就是为什么我更喜欢它;)我完全同意,+1。。。我以前从未使用过这个运算符。请双向编写代码。测量性能。否则你怎么知道这两件事中哪一件更快?@EricLippert你可能是少数几个不做测试就能知道的人之一……我向你保证这不是真的;如果我对性能分析有一点了解的话,那就是猜测两件事中哪一件更快是毫无意义的。测量性能。否则你怎么知道这两件事中哪一件更快?@EricLippert你可能是少数几个不做测试就能知道的人之一……我向你保证这不是真的;如果我对性能分析有一点了解的话,那就是猜测两件事情中哪一件更快是毫无意义的。
foreach (var foo in foos)
{
    _stale = _foos.Add(foo) | _stale;

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