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