gpt4 book ai didi

c# - 使用(新变量或声明新变量)给出参数在 ram 用法上有区别吗?

转载 作者:行者123 更新时间:2023-11-30 21:55:30 25 4
gpt4 key购买 nike

前几天我在编程,我很好奇是不是

用新的论据

Application.Run(new Form1());

或声明新变量

Form1 form1 = new Form1();
Application.Run(form1);

在内存使用、速度等方面存在差异

它们有什么不同吗?

最佳答案

是的,有区别。

我定义了这个方法来显示区别:

public string Run(string param)
{
return param + "!";
}

然后我用这两种方式调用它:

(1)

    var text = "Hello";
Console.WriteLine(Run(text));

(2)

    Console.WriteLine(Run("Hello"));

第一个产生这个 IL:

IL_0000:  nop         
IL_0001: ldstr "Hello"
IL_0006: stloc.0 // text
IL_0007: ldarg.0
IL_0008: ldloc.0 // text
IL_0009: call Run
IL_000E: call System.Console.WriteLine
IL_0013: nop
IL_0014: ret

第二个产生这个 IL:

IL_0000:  nop         
IL_0001: ldarg.0
IL_0002: ldstr "Hello"
IL_0007: call Run
IL_000C: call System.Console.WriteLine
IL_0011: nop
IL_0012: ret

区别在于 IL STLoc.0。第一个方法在调用之前为 text 变量分配存储空间。第二种方法没有。

虽然差异非常小。

每个优化的代码是:

(1)

IL_0000:  ldstr       "Hello"
IL_0005: stloc.0 // text
IL_0006: ldarg.0
IL_0007: ldloc.0 // text
IL_0008: call Run
IL_000D: call System.Console.WriteLine
IL_0012: ret

(2)

IL_0000:  ldarg.0     
IL_0001: ldstr "Hello"
IL_0006: call Run
IL_000B: call System.Console.WriteLine
IL_0010: ret

存储方面的变化仍然相同 - 只是更少的 nop

关于c# - 使用(新变量或声明新变量)给出参数在 ram 用法上有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32246442/

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