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

时间:2012-06-04 07:00:43

标签: c# performance parameter-passing

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

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

传递给方法调用类或结构(哪个?)保存两个int参数和一个对象引用会更好性能方面,还是更好地通过这三个作为三个参数?

注意: 我在Unity3D平台上开发,所以有些东西可能与经典的.NET

不同

4 个答案:

答案 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)

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