_continue_ 关键字在 c# 中的计算成本高吗?
Is _continue_ keyword computationally expensive in c#?
当我意识到一个奇怪的行为时,我对我的代码进行了分析。 VS2013 为我的每个继续关键字分配了 6.5 的百分比!请考虑以下快照。
我是不是漏掉了一点?
编辑
如果我用 if else-if
条件替换 continue
会怎样?
下面是另一个配置文件。我可以假设成本消失了,还是只是分摊了?!
没有; continue
通常映射到无条件分支(br
或 br.s
)。这里唯一的 "expense" 是 接下来会发生什么 - 在您的情况下,MoveNext()
。 that 所做的完全特定于您的序列。
我会专注于提高效率
在现实生活中,效率更高 运行 更快
借用评论
我可能会更快让它在 add
上抛出异常
让它在添加
时抛出异常可能不会更快
foreach (var lamda in ...
{
if (lamda.phi == true)
{
...
}
else if (_left.Remove(lamda.Ati))
{}
else
{
try
{
_determined.Add(lamda.Ati, lamda.phi)
_righEnds --;
}
catch (ArgumentException ex)
{
// do nothing
}
}
}
上 _determined.Add lamda.phi 永远是 false
为什么不是 HashSet?
HashSet.Add returns 布尔值
当我意识到一个奇怪的行为时,我对我的代码进行了分析。 VS2013 为我的每个继续关键字分配了 6.5 的百分比!请考虑以下快照。
我是不是漏掉了一点?
编辑
如果我用 if else-if
条件替换 continue
会怎样?
下面是另一个配置文件。我可以假设成本消失了,还是只是分摊了?!
没有; continue
通常映射到无条件分支(br
或 br.s
)。这里唯一的 "expense" 是 接下来会发生什么 - 在您的情况下,MoveNext()
。 that 所做的完全特定于您的序列。
我会专注于提高效率
在现实生活中,效率更高 运行 更快
借用评论
我可能会更快让它在 add
上抛出异常
让它在添加
foreach (var lamda in ...
{
if (lamda.phi == true)
{
...
}
else if (_left.Remove(lamda.Ati))
{}
else
{
try
{
_determined.Add(lamda.Ati, lamda.phi)
_righEnds --;
}
catch (ArgumentException ex)
{
// do nothing
}
}
}
上 _determined.Add lamda.phi 永远是 false
为什么不是 HashSet?
HashSet.Add returns 布尔值