我有一个C#4.0应用程序,在这个应用程序中我有很多不必要的变量。与下面代码中的_foo
变量类似:
public string Foo() {
var _foo = "foo bar";
return _foo;
}
正如我所提到的,像这样的情况发生在很多方法中。
很多不必要的变量(比如我在本例中解释的那些)会导致C#中的性能问题吗?
修改
如果我要删除它们,我不会问任何建议。我的问题是性能效应。事实上,该应用程序不是由我编写的,我是这个项目的新手。我刚看到并想知道它是否有任何性能。除了它对代码质量有影响这一事实之外的效果。
答案 0 :(得分:25)
不,他们不会。会有很多不必要的变量(就像我在这里解释的那样) case)导致C#中的性能问题?
在Release模式下编译并优化代码时,编译器足够智能,可以删除所有不必要的东西:
public string Foo()
{
return "foo bar";
}
或更准确地说:
.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
}
与其调试模式相比,它完全不同:
.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
}
从性能的角度来看,绝对不是你应该担心的事情。您应该担心的是代码的可读性,这个优化的代码示例似乎比您的版本更具可读性。
因此,您可以信任不断改进的编译器,并能够优化这种情况。
答案 1 :(得分:1)
除非系统出现明显的性能问题,否则不应对性能进行编码/修改。作为软件开发人员,我们的第一个目标是编写干净,可读,优雅的代码。就像Darin所说,上面的编译器将代表我们完成机器执行优化工作。
答案 2 :(得分:0)
如果这是一个未使用的变量,它可能会导致降低性能并增加程序集的大小,因为它们会在运行时占用内存空间。
如需进一步阅读和参考,您可以查看:
https://msdn.microsoft.com/en-us/library/ms182278(v=vs.140).aspx