我正在写MyClassCollection
。它是一个数组,会存储很多MyClass
的实例。该数组声明如下:MyClass[] myClassInstances;
按Add(MyClass ins)
方法我将ins
存储在myClassInstances
中。
我的问题是:我应该通过引用传递它吗?我会获得更好的表现吗?我真的不需要它的副本;我更喜欢使用实例化的类(对吧?);或者它是无用的优化(可能只是内存?)。
这是我目前的代码:
class foo { }
class foocollection {
private foo[] foo_instances;
public @property foo[] data() { return foo_instances; }
public void add(foo f) {
++foo_instances.length;
foo_instances[$-1] = f;
}
}
答案 0 :(得分:3)
你所拥有的甚至不是合法代码。您无法增加数组。如果您要将f
追加到foo_instances
,请使用追加运算符:
foo_instances ~= f;
至于参考传递,我不太明白你的要求。 你想通过引用传递什么? add
的论点?即。
public void add(foo f) {...}
VS
public void add(ref foo f) {...}
ref
毫无意义。你没有改变传入的类引用,所以没有理由使用ref
。那只会令人困惑。虽然你需要分析100%确定性能影响是什么,如果经过ref
更快,我会感到非常惊讶。将类传递给函数时,不会复制类。他们是参考类型。所以,它是被复制的参考 - 而不是对象。它基本上是一个指针(虽然我相信它确实有一些额外的类型的东西,所以它只是一个指针)。复制它们很便宜。您不必担心将类传递给函数的成本。如果您使用 struct ,它可能会有所不同,因为结构通常是值类型并且在堆栈上,除非您明确地将它们放在堆上,但对于类,它不是问题。
无论如何,如果您有性能问题,那么要做的第一件事就是分析您的代码。确实有些东西显然比其他东西效率更高或更低,但是在看到编译器实际执行的操作之前,您通常不会确切知道,结果往往与您的预期相反。因此,如果您想了解性能,请分析您的代码。