2012-06-04 66 views
3

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

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

它会更好性能代价通入一个方法调用类或结构(其?)保持两个int参数和一个对象引用,或倒不如通过这三个作为三个参数?

注: 我开发的Unity3D的平台上,因此它可能有些事情的工作方式不同,则经典的.NET

+2

如果真的很重要,请测量它。否则不要打扰。 – jeroenh

回答

7

如果传递class,那么你需要做的第一件事就是创建一个对象,稍后需要垃圾收集。通常情况下不是问题,但在某些Unity目标平台上可能不合需要如果您正在执行此操作。

如果您通过struct正常,那么它需要复制结构。如果它足够大,可以提出关于封装的问题(即代表不止一个参数),那么它可能非常不重要,并且可能会非常痛苦地复制整个时间,特别是如果传递几层。

传递个别参数是众所周知的,不应该引起巨大的问题。 4.0中的可选参数可以使添加更多参数更简单,但是它们仍然通过(仅使用它们的默认值)。

团结一个有趣的选择行经struct由参,因为这复制的内容(它只是传递给你创造的价值的参考,一般在栈中),和要求任何垃圾收集,即

var args = new SomeArgs(123, "abc", 23.4F, false); // <=== a struct 
SomeMethod(ref args); 

然而,在最有用的情况下,我不能看到这你获得过很多刚刚

SomeMethod(123, "abc", 23.4F, false); 

除非您将参数向下传递几层 - 在这种情况下,它具有不需要任何复制的优点。但要小心:调用堆栈中的值不再独立(常规参数,不通过ref,与方法分离)。

认为至少介绍了一些事情考虑,但我没有给你一个定论。如果你想要更科学的东西,你可能需要测量。

+0

数据仅通过一个级别。 所以基本上,我需要创建一个新的结构,用参数构建到方法调用中,然后在方法中,这是一个事件,我将访问这些参数。 – gStation

+0

@gStation我只是将它们作为参数传递,然后假设它们没有质量 –

+0

它只是这3个参数(枚举,int,对象) – gStation

1

它取决于有多少参数。

如果您有10个参数,对其进行管理将非常困难(可读性和代码管理透视图)。将所有这些参数放入课堂并通过该课程将是明智的。

性能观点它会增加一点开销,但它的价值不是传递所有这些参数。

0

如果你只传递对象类型数据,你可以尝试使用params。

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

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

0

如果性能是你的担心,那么你应该去寻找结构。与类相比,结构是轻量级的,它背负着大量的数据结构。