Cha*_*eck 2 c# clr garbage-collection
有人可以告诉我下面的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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果Vec2 struct
在两个示例中都是一个,通过使用Vec2 v = new Vec2();
您不创建对结构的引用,您只需在堆栈上创建一个新结构.如果不使用该new
关键字,则仍会在堆栈上创建结构,并且可以单独初始化每个字段.
在这种情况下,new
如果构造函数不接受一些有意义的参数来在一行中初始化数据,那么对结构使用关键字没有多大意义.
如果第一种方法使用a class
而不是a struct
,那么它确实会为GC收集一个对象,这与第二种方法不同.由于v in AddB
是在堆栈上分配的,因此不会收集它,只需在方法完成时弹出堆栈.
归档时间: |
|
查看次数: |
319 次 |
最近记录: |