我想知道哪种方式能让我们在以下两种方式上取得更好的表现:
1。方式1
for(int i = 0; i < 10; i++) { // do something in loop }
2。方式2
for(int i = Constants.Zero; i < Constants.Ten; i++) { // do something in loop }
private const int Zero = 0;
private const int Ten = 10;
基本上我想知道如果我们如上所述在Constants
中使用for loop variable declaration
,我们是否可以提高应用性能?
提前致谢!
答案 0 :(得分:4)
这里没有任何性能优势,因为以这种方式声明的变量将最终成为注入的常量,就像在第一种情况下一样。所以他们变得基本相同。
//code 1
for(int i = 0; i < 10; i++)
{
Console.WriteLine("Hello");
}
//IL 1
IL_0001: ldc.i4.0
IL_0002: stloc.0
IL_0003: br.s IL_0016
IL_0005: nop
IL_0006: ldstr "Hello"
IL_000B: call System.Console.WriteLine
IL_0010: nop
IL_0011: nop
IL_0012: ldloc.0
IL_0013: ldc.i4.1
IL_0014: add
IL_0015: stloc.0
IL_0016: ldloc.0
IL_0017: ldc.i4.s 0A
IL_0019: clt
IL_001B: stloc.1
IL_001C: ldloc.1
IL_001D: brtrue.s IL_0005
//code 2
for(int i = Constants.Zero; i < Constants.Ten; i++)
{
Console.WriteLine("Hello");
}
//IL 2
IL_0001: ldsfld UserQuery+Constants.Zero
IL_0006: stloc.0
IL_0007: br.s IL_001A
IL_0009: nop
IL_000A: ldstr "Hello"
IL_000F: call System.Console.WriteLine
IL_0014: nop
IL_0015: nop
IL_0016: ldloc.0
IL_0017: ldc.i4.1
IL_0018: add
IL_0019: stloc.0
IL_001A: ldloc.0
IL_001B: ldsfld UserQuery+Constants.Ten
IL_0020: clt
IL_0022: stloc.1
IL_0023: ldloc.1
IL_0024: brtrue.s IL_0009
在 second 的情况下,我使用static
类来创建常量。
答案 1 :(得分:3)
没有性能差异。在两种情况下,编译的for
循环都将完全相同。
常量被“烧入”已编译的代码,就像你使用了文字值一样。
(我假设这只是一个玩具示例:否则你为什么要用你自己的替换完美的,普遍认可的符号 - 0
,10
等等不广为人知的版本?)