gpt4 book ai didi

c# - 丢弃算子的性能优势

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

假设我的 C# 应用程序中有这个:

try{
Somethrowingmethod();
}catch(Exception ex){
throw new Exception("oops");
}

如果我保持代码不变,编译器会(理所当然地)提示我声明了 ex 但没有使用它。

所以我应该这样做:

try{
Somethrowingmethod();
}catch(Exception _){
throw new Exception("oops");
}

我的问题是,一旦我这样做,性能会得到提升吗?

或者只是为了练习干净的代码?

最佳答案

您的问题有缺陷,因为您的示例不涉及丢弃。相反,它会将 Exception 变量命名为 _,并且仍应针对未使用的变量发出相同的警告。请参阅this SharpLab示例并查看生成的 IL 的警告和 .locals init

.locals init (
[0] class [System.Private.CoreLib]System.Exception
)

“丢弃”异常的正确方法是仅捕获类型:

try {
DoSomething();
} catch (Exception) {
//...
}

这不会声明一个局部变量,您可以在上面的链接中通过删除 _ 并查看更新的 .locals init 部分来验证该变量(提示:它是现在已经消失了)。

由于这是捕获基本异常类型,您也可以将其重写为:

try {
DoSomething();
} catch {
//...
}

但请注意,捕获所有/捕获基本Exception类型通常是一个坏主意。

回到您最初的询问:这些场景中的任何一个都不会带来性能提升。 至多一个变量被省略,但true丢弃只是语法糖,并且仍然声明​​了一个变量。这段代码:

int.TryParse("1", out _);

仍然涉及一个int类型的局部变量。您可以通过查看 same section of the IL 看到这一点。

.locals init (
[0] int32
)

但同样,没有性能提升。

关于c# - 丢弃算子的性能优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61566181/

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