gpt4 book ai didi

c# - 尝试减少 GC 收集

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

有人可以告诉我下面的 AddB 是否会导致比 AddA 更少的 CLR 分配?我已经检查了反汇编,看起来是这样,但我希望得到专家的确认。有人可以与我交换此信息吗?

干杯,查理。


namespace A
{
struct Vec2
{
public float x;
public float y;

public Vec2 AddA(Vec2 other)
{
Vec2 v = new Vec2(); // Reference variable
v.x = x + other.x;
v.y = y + other.y;
return v;
}

public Vec2 AddB(Vec2 other)
{
Vec2 v; // Value variable
v.x = x + other.x;
v.y = y + other.y;
return v;
}
}
}

最佳答案

如果 Vec2 在两个示例中都是 struct,则通过使用 Vec2 v = new Vec2();不会创建对你的结构,你只是在你的堆栈上创建一个新的结构。如果您不使用 new 关键字,您的结构仍然会在堆栈上创建,您可以单独初始化每个字段。

在那种情况下,如果您的构造函数不接受一些有意义的参数来在一行中初始化数据,则对结构使用 new 关键字没有多大意义。

如果第一种方法使用class而不是struct,那么它确实会创建一个对象供GC 收集,这与第二种方法不同。由于 AddB 中的 v 分配在堆栈上,因此不会被收集,堆栈会在您的方法完成时弹出。

关于c# - 尝试减少 GC 收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/919931/

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