gpt4 book ai didi

c#-4.0 - 需要知道开关性能 C#

转载 作者:行者123 更新时间:2023-12-04 23:28:32 24 4
gpt4 key购买 nike

假设在某些方法上有一个开关,例如

static string switchExample(string abc){
switch(abc.ToUpper()) {
case "123":
return "Numeric";
case "ab":
return "Alphabets";
default:
return "symbol";
}
}

现在在这里我需要知道是否有任何性能问题来使用多个退出点(在每种情况下返回),就像我在给定代码中所做的那样,而不是通过在开始时创建一些临时字符串并填充它来一次传递更新的值对应大小写匹配。

最佳答案

使用 Visual Studio 11 Developer Preview 进行测试表明,如果您的 switch 语句少于 7 个 case(6 个 case 和一个默认值),那么编译器会生成一系列 if声明。您的示例代码将转换为等效于:

string s = abc.ToLower();
if (s == "123") return "Numeric";
if (s == "ab") return "Alphabetic";
return "symbol";

如果有 7 种或更多情况,编译器会生成创建字典的代码,将字符串映射到连续整数。然后它使用 IL switch语句(类似于其他语言中的计算转到)根据值分支到不同的代码。

生成的代码使得字典只创建一次——第一次执行 switch 语句时。该 switch 语句的后续使用不必重新创建字典。

在效率方面,编译器为一个小的 switch 语句生成的代码相当于多个 if 语句。当超过 6 种情况(包括默认情况)时,编译器的字典查找会比多个 switch 语句更快。

请注意,我的数字基于使用未发布版本编译器的开发人员预览的非常小的样本(一些测试)。以前版本的编译器可能有不同的阈值或可能使用其他方法,而新编译器的最终发布版本的处理方式可能与我上面描述的有所不同。我不会指望这些实现细节中的任何一个。

总之,写 switch .让编译器担心如何让它更快。

关于c#-4.0 - 需要知道开关性能 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8529899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com