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

gSt*_*ion 4 c# performance parameter-passing

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

我想知道性能方面的考虑因素.

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

注意:我在Unity3D平台上进行开发,因此有些东西可能与经典的.NET不同

Mar*_*ell 7

如果你传递了一个class,那么你需要做的第一件事是创建一个对象,以后需要进行垃圾回收.通常不是问题,但是在某些Unity目标平台上,如果您正在进行此操作,这可能是不受欢迎的.

如果你struct 正常传递,那么它需要复制结构.如果它足够大,你可以提出有关封装的问题(即代表多个参数),那么它可能非常重要,并且可能一直很难复制,特别是如果传递几层.

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

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

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

但是,在大多数有用的情况下,我看不出这会让你获益匪浅

SomeMethod(123, "abc", 23.4F, false);
Run Code Online (Sandbox Code Playgroud)

除非您将参数传递给几层 - 在这种情况下,它具有不需要任何复制的优点.但请注意:调用堆栈中的层之间的值不再是独立的(常规参数,未传递ref,与方法隔离).

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