Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 传递一个类/结构与传递多个参数_C#_Performance_Parameter Passing - Fatal编程技术网

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

C# 传递一个类/结构与传递多个参数,c#,performance,parameter-passing,C#,Performance,Parameter Passing,传递一个类/结构与传递多个参数 我想知道性能方面的考虑 在性能方面,将包含两个int参数和一个对象引用的类或结构传递到方法调用中会更好,还是将这三个作为三个参数传递更好 注: 我是在Unity3D平台上开发的,因此可能有些东西的工作方式与经典的.NET不同。如果您传递了一个类,那么您需要做的第一件事就是创建一个对象,稍后需要对其进行垃圾收集。这通常不是问题,但在某些Unity目标平台上,如果您经常这样做,这可能是不受欢迎的 如果您正常传递一个struct,那么它需要复制该结构。如果它足够大,可以

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

我想知道性能方面的考虑

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

注:
我是在Unity3D平台上开发的,因此可能有些东西的工作方式与经典的.NET不同。如果您传递了一个
,那么您需要做的第一件事就是创建一个对象,稍后需要对其进行垃圾收集。这通常不是问题,但在某些Unity目标平台上,如果您经常这样做,这可能是不受欢迎的

如果您正常传递一个
struct
,那么它需要复制该结构。如果它足够大,可以让您询问有关封装的问题(即,表示多个参数),那么它可能非常大,并且可能会一直复制,特别是在传递几层时

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

unity的一个有趣的选项是通过ref传递
结构,因为该不会复制内容(它只传递对您创建的值的引用,通常在堆栈上),并且不需要任何垃圾收集,即

var args = new SomeArgs(123, "abc", 23.4F, false); // <=== a struct
SomeMethod(ref args);
当然,除非您将参数向下传递几层——在这种情况下,它的优点是不需要任何复制。但要注意:调用堆栈中的层之间的值不再是独立的(常规参数,未传递
ref
,与方法隔离)


我认为这至少说明了一些需要考虑的问题,但我没有一个决定性的答案。如果你想要更科学的东西,你可能需要测量。

这取决于有多少参数

如果您有10个参数,管理它将非常困难(可读性和代码管理角度)。建议将所有这些参数合并到一个类中并通过该类


从性能角度看,它会增加一点开销,但比传递所有此类参数更划算。

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

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

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

如果性能是您关心的问题,那么您应该使用结构。与类相比,结构的重量很轻,类的背面承载了大量的数据结构。

如果它真的重要,请测量它。否则就不用麻烦了。数据只传递一级。因此,基本上,我需要创建一个新的结构,将参数构造到方法调用中,然后在方法中(这是一个事件),我将访问这些参数。@gStation我只将它们作为参数传递,然后,假设没有大量的参数,它只是这3个参数(enum、int、object)@gStation只是将它们作为常规离散参数传递。我已经运行了一些广泛的测试,其中我传递了对结构的引用和指向结构的指针,以及常规参数和按引用传递的参数。性能增量令人惊讶。使用params和structs时,处理8个int并在其上运行简单加法的速度要快15倍以上。指向结构的指针速度最慢。
public static void myMethod(params object[] list)
    {
      // do something
    }