gpt4 book ai didi

c# - .NET 返回值优化

转载 作者:太空狗 更新时间:2023-10-29 22:15:59 24 4
gpt4 key购买 nike

.NET 编译器会优化这个吗:

public MyObject GetNewObject()
{
var newCurrentObject = myObjectFactory.CreateNew(
DateTime.Now,
"Frank",
41,
secretPassword);

return newCurrentObject;
}

使用与此相同数量的指令/内存执行:

public MyObject GetNewObject()
{
return myObjectFactory.CreateNew(
DateTime.Now,
"Frank",
41,
secretPassword);
}

或者局部变量是否会导致花费额外的时间和内存来创建对 MyObject 的引用 (newObject),一旦它超出范围,只会在下一行将其销毁。

我问是因为,性能都一样,我发现第一个更具可读性,因为局部变量名通常可以为下一个开发人员提供一些关于我们在这里做什么的上下文。

最佳答案

假设 MyObject 是一个引用类型,那么两种情况都会生成相同的 x86。 JIT 在优化标量临时变量和分配方面非常有能力。这是最基本的优化之一。几乎所有优化器都在内部使用 SSA 形式,而这种优化几乎脱离了 SSA 形式。

假设 MyObject 是一个 struct:我已经对 .NET 4.5 JIT 和新的 RyuJIT 进行了广泛的结构优化测试。 .NET JIT 通常不会优化结构分配和(局部)变量。代码是按字面翻译的,除了一个不适用于此处的小案例。期待完全文字的机器代码。即使你说 a = a;a.x = 1; a.x = 1; 你得到的正是机器代码。如果结构对您很重要,请向团队发送邮件。现在仍然是做出改变的时候了。

关于c# - .NET 返回值优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29781543/

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