c# - 以下情况有什么区别?
问题描述
代码在 C# 中
情况1
var p = new Person();
p = getPerson(p);
案例2
var p = new Person();
getPerson(p);
在上述情况下,任何情况下都会消耗额外的内存吗?
解决方案
假设getPerson
只修改了 的属性,Person
并且有 2 种不同的方法,一种返回一个人,另一种是无效的,这段代码没有明显的区别
static void Main(string[] args)
{
// example 1
var p = new Person();
p = getPerson1(p);
// example 2
var p2 = new Person();
getPerson2(p2);
}
示例 1
IL_0001: newobj instance void ConsoleApp8.Person::.ctor()
IL_0006: stloc.0 // p
// [33 10 - 33 28]
IL_0007: ldloc.0 // p
IL_0008: call class ConsoleApp8.Person ConsoleApp8.Program::getPerson1(class ConsoleApp8.Person)
IL_000d: stloc.0 // p
示例 2
IL_000e: newobj instance void ConsoleApp8.Person::.ctor()
IL_0013: stloc.1 // p2
// [36 4 - 36 19]
IL_0014: ldloc.1 // p2
IL_0015: call void ConsoleApp8.Program::getPerson2(class ConsoleApp8.Person)
IL_001a: nop
从计算堆栈顶部弹出当前值并将其存储在指定索引处的局部变量列表中。
如果修补了操作码,则填充空间。尽管可以消耗一个处理周期,但没有执行任何有意义的操作。
简而言之,担心其他事情
推荐阅读
- jsf - How to escape double quotes for Primefaces SelectOneMenu in Application level?
- pandas - 如何将一系列元组转换为 DataFrame?
- xml - 无法保存 XML 文件,无法访问文件“\\Server\Folder\Access.xml”,因为它正被另一个进程使用
- c++ - 子数组分配:聚合对象错误预期使用“{...}”进行初始化
- mysql - 我在 MySQL 工作台中看到的变量与我在 docker-compose 中看到的不匹配
- reactjs - React Joi uri 验证可选
- android - 旋转器如何关闭?
- php - 如何从一张表中选择两个 SUM,但一个 SUM 只能从最大值中选择。数据
- javascript - 添加 cookie 过期日期
- php - PHP 表单未创建 .csv 文件