传递一个类/结构与传递几个参数
我想知道性能方面的考虑。
传递给方法调用类或结构(哪个?)保存两个int参数和一个对象引用会更好性能方面,还是更好地通过这三个作为三个参数?
注意: 我在Unity3D平台上开发,所以有些东西可能与经典的.NET
不同答案 0 :(得分:7)
如果您传递class
,那么您需要做的第一件事是创建一个对象,稍后需要对其进行垃圾回收。通常不是问题,但在某些Unity目标平台上可能是不合需要的如果你正在这么做。
如果你通常传递struct
,那么它需要复制结构。如果它足够大,你可以提出有关封装的问题(即代表多个参数),那么它可能非常重要,并且可能一直很难复制,特别是如果传递几层
传递单个参数是众所周知的,不应该导致巨大的问题。 4.0中的可选参数可以使添加更多参数减少痛苦,但它们仍然被传递(仅使用它们的默认值)。
一个有趣的选项 for unity 是通过参考传递struct
,因为不会复制内容(它只是传递对您创建的值的引用,通常在堆栈上),而不会需要任何垃圾回收,即
var args = new SomeArgs(123, "abc", 23.4F, false); // <=== a struct
SomeMethod(ref args);
然而,在大多数有用的情况下,我看不出这会让你获得更多的收益
SomeMethod(123, "abc", 23.4F, false);
除非您将参数传递到几层 - 在这种情况下,它具有不需要任何复制的优点。但请注意:调用堆栈中的层之间的值不再是独立的(常规参数,未传递ref
,与方法隔离)。
我认为至少描述了考虑的一些事情,但我没有给你一个确定的答案。如果你想要更科学的东西,你可能需要测量。
答案 1 :(得分:1)
这取决于有多少参数。
如果您有10个参数,那么管理它将非常困难(可读性和代码管理视角)。建议将所有这些参数归入一个类并通过该类。
从性能的角度来看,它会增加一点开销,但它的价值却超过了所有这些参数。
答案 2 :(得分:0)
如果你只传递对象类型数据,你可以尝试使用params。
public static void myMethod(params object[] list)
{
// do something
}
你可以传递任意数量的参数。
答案 3 :(得分:0)
如果性能是您关注的问题,那么您应该选择结构。与类相比,结构重量轻,背面有很多数据结构。