4

传递一个类/结构与传递多个参数

我想知道性能方面的考虑。

将一个类或结构(哪个?)传递到一个方法调用中会更好的性能,它包含两个 int 参数和一个对象引用,还是将这三个作为三个参数传递会更好?

注意:我是在 Unity3D 平台上开发的,所以有些东西的工作方式可能与经典的 .NET 不同

4

4 回答 4

8

如果你传递 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,与方法隔离)。

认为这至少描述了一些要考虑的事情,但我没有给你一个确凿的答案。如果你想要更科学的东西,你可能需要测量。

于 2012-06-04T07:09:01.020 回答
1

这取决于有多少参数。

如果你有 10 个参数,管理起来会非常困难(可读性和代码管理角度)。建议将所有这些参数集中在一个类中并通过该类。

从性能的角度来看,它会增加一点开销,但它比传递所有这些参数更有价值。

于 2012-06-04T07:14:02.353 回答
0

如果您只想传递对象类型数据,您可以尝试使用参数。

public static void myMethod(params object[] list)
    {
      // do something
    }

您可以传递任意数量的参数。

于 2012-06-04T08:06:35.360 回答
0

如果性能是您关心的问题,那么您应该选择结构。与类相比,结构是轻量级的,它的背面带有很多数据结构。

于 2012-06-04T08:24:56.973 回答