在C#中使用switch语句与使用语句的好处/缺点是什么?if/else我无法想象除了你的代码外观之外还有其他重大差异.
是否有任何理由导致生成的IL或相关的运行时性能完全不同?
我一直想知道这件事已经有一段时间了.我到目前为止还不是一个核心程序员,主要是小型Python脚本,我写了几个分子动力学模拟.对于真正的问题:switch语句有什么意义?你为什么不能只使用if-else语句?
感谢您的回答,如果之前有人询问过,请指向我的链接.
编辑
S.Lott指出,这可能是问题If/Else vs. Switch的重复.如果你想关闭然后这样做.我将把它留待进一步讨论.
如何检测浏览器支持的JavaScript版本(如果有)?我想检查ECMAScript 3与ECMAScript 5对比ECMAScript 6.
注意:我想避免使用已弃用的language标记.
我正在决定是否在我正在编写的PHP网站中使用if/ elsevs switch/ case我想知道使用其中一个是否有任何好处,或者是否存在某个用于使用其中一个而不是另一个的某些实例.
我想看看我在浏览器中使用的ECMAscript版本(例如,chrome 59),因为在处理RegExp的东西时,ECMAscript3和ECMAscript5之间存在一些差异.
我已经找到了相关的相关信息,但我找不到有关如何检测ECMAscript版本的具体答案.
提前致谢.
我在visual studio中创建了一个C#方法,它只包含一个switch语句,每个case返回一个值.根据个人习惯,我提出了类似于以下代码的内容:
private string SwitchMethod(int num)
{
switch (num)
{
case 0:
return "result 1";
case 1:
return "result 2";
case 2:
return "result 3";
}
return "no result";
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:哪个代码会有更好的性能?上面或下面的代码,或者是相同的?为什么?
我会假设因为编译器优化......它们可能只是相同......但我真的不知道.
private string SwitchMethod(int num)
{
switch (num)
{
case 0:
return "result 1";
case 1:
return "result 2";
case 2:
return "result 3";
default:
return "no result";
}
}
Run Code Online (Sandbox Code Playgroud)
修订:看起来我应该更具体一点:编译时......一个或另一个会生成效率较低的代码吗?
我意识到性能上的差异可能微不足道......我真的很好奇.
请帮我确定以下哪些是更优化的代码?
for(int i=0;i<count;i++)
{
switch(way)
{
case 1:
doWork1(i);
break;
case 2:
doWork2(i);
break;
case 3:
doWork3(i);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
要么
switch(way)
{
case 1:
for(int i=0;i<count;i++)
{
doWork1(i);
}
break;
case 2:
for(int i=0;i<count;i++)
{
doWork2(i);
}
break;
case 3:
for(int i=0;i<count;i++)
{
doWork3(i);
}
break;
}
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,总是在每次迭代中始终检查开关情况条件的开销.在第二种情况下,开销不存在.我觉得第二种情况要好得多.如果有人有任何其他解决方法,请帮我建议.
通常,使用if块和其他许多ifs与switch case block相比有什么性能差异?某些语言或风格约定更喜欢一个吗?
具体来说,我对Matlab,C和C++很好奇
language-agnostic performance if-statement switch-statement conditional-statements
我在StackOverflow上读到了这个
if(someCondition)
{
someCode();
}
else
{
alternateCode();
}
Run Code Online (Sandbox Code Playgroud)
由于易受分支错误预测的影响,效率可能很低(例如,请参阅此问题).
所以是一个switch构造,例如,
switch (someCondition)
{
case (someCase):
something();
break;
case (otherCase):
someOtherInstructions();
break;
default:
defaultAction();
break;
}
Run Code Online (Sandbox Code Playgroud)
在这方面有什么不同(除了我允许三种可能性的事实)?
language-agnostic optimization performance compiler-optimization branch-prediction
我有以下代码If块,该代码块是我正在重写的登录脚本中的代码块:
If ($distinguishedname -match 'Joe Bloggs') {
Map-Drive 'X' "\\path\to\drive"
}
If ($distinguishedname -match 'Steve Bloggs') {
Map-Drive 'X' "\\path\to\drive"
}
If ($distinguishedname -match 'Joe Jobs') {
Map-Drive 'X' "\\path\to\drive"
}
Run Code Online (Sandbox Code Playgroud)
显然,它需要重新编写为一条If/Else语句(因为每个用户只有一个名称!)但是,我更喜欢以下switch -Regex方法的外观:
switch -Regex ($distinguishedname) {
'Joe Bloggs' {Map-Drive 'X' "\\path\to\drive"; break}
'Steve Bloggs' {Map-Drive 'X' "\\path\to\drive"; break}
'Joe Jobs' {Map-Drive 'X' "\\path\to\drive"; break}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是-以这种方式使用开关会对该功能的性能产生影响吗?它必须比上面的(if/if/if)更好,因为不是每次都评估每种可能性,但是会switch比ifelse/ifelse/else?更快。
我的好友说,为了效率,他试图用尽可能少的if/else语句进行编程.当我问他为什么说如果/其他人占用该计划资源的一个重要部分时,他就试图远离他们.
他是对的吗?有没有更好的方法来执行if/else样式代码而不实际使用该结构?开关/箱体结构是否更好?
编辑:他不是指一种特定的语言,而是更多的一般做法.以及UNIX/Linux和Windows平台.
performance ×5
c# ×3
if-statement ×3
javascript ×2
.net ×1
ecmascript-5 ×1
for-loop ×1
logic ×1
optimization ×1
php ×1
powershell ×1