许多不必要的变量会导致C#中的性能问题吗?

tug*_*erk 8 c# performance c#-4.0

我有一个C#4.0应用程序,在这个应用程序中我有很多不必要的变量.像_foo下面代码中的变量一样:

public string Foo() { 
    var _foo = "foo bar";
    return _foo;
}
Run Code Online (Sandbox Code Playgroud)

正如我所提到的,像这样的情况发生在很多方法中.

很多不必要的变量(比如我在这种情况下解释的那些)会导致C#中的性能问题吗?

编辑:

如果我要删除它们,我不会问任何建议.我的问题是性能效应.事实上,该应用程序不是由我编写的,我是这个项目的新手.我刚看到并想知道它是否有任何性能.效果除了它对代码质量有影响的事实.

Dar*_*rov 24

很多不必要的变量(比如我在这种情况下解释的那些)会导致C#中的性能问题吗?

不,他们不会.

编译器足够智能,可以在发布模式下编译时删除所有不必要的东西,并优化代码:

public string Foo()
{
    return "foo bar";
}
Run Code Online (Sandbox Code Playgroud)

或者更准确地说:

.method public hidebysig instance string Foo() cil managed
{
    .maxstack 1
    .locals init (
        [0] string str)
    L_0000: ldstr "foo bar"
    L_0005: stloc.0 
    L_0006: ldloc.0 
    L_0007: ret 
}
Run Code Online (Sandbox Code Playgroud)

与其调试模式相比,它与完全不同:

.method public hidebysig instance string Foo() cil managed
{
    .maxstack 1
    .locals init (
        [0] string _foo,
        [1] string CS$1$0000)
    L_0000: nop 
    L_0001: ldstr "foo bar"
    L_0006: stloc.0 
    L_0007: ldloc.0 
    L_0008: stloc.1 
    L_0009: br.s L_000b
    L_000b: ldloc.1 
    L_000c: ret 
}
Run Code Online (Sandbox Code Playgroud)

从性能的角度来看,这绝对不是你应该担心的事情.您应该担心的是代码的可读性,这个优化的代码示例似乎比您的版本更具可读性.

因此,您可以信任不断改进并能够优化此类情况的编译器.