0

我正在写一个MyClassCollection. 这是一个数组,将存储大量MyClass. 该数组声明如下:MyClass[] myClassInstances;通过Add(MyClass ins)方法我存储insmyClassInstances.

我的问题是:我应该通过引用传递它吗?我会得到更好的表现吗?我真的不需要它的副本。我更喜欢使用实例化的类(对吗?);或者它是一种无用的优化努力(也许只是内存?)。

这是我当前的代码:

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;
  }
}
4

1 回答 1

3

你所拥有的甚至不是法律代码。你不能增加一个数组。如果要追加ffoo_instances,请使用追加运算符:

foo_instances ~= f;

至于通过引用传递,我不太明白你在问什么。想通过引用传递什么?论据add?IE

public void add(foo f) {...}

对比

public void add(ref foo f) {...}

ref是没有意义的。您没有更改传入的类引用,因此没有理由使用ref. 那只会令人困惑。虽然您需要 100% 确定性能影响是什么,但如果通过ref速度更快,我会感到非常惊讶。类在传递给函数时不会被复制。它们是引用类型。所以,它是被复制的引用——而不是对象。它基本上是一个指针(尽管我相信它确实有一些额外的类型内容,因此它比指针略多)。复制它们很便宜。您不必担心将类传递给函数的成本。如果您使用的是结构,它可能会有所不同,因为结构通常是值类型并且在堆栈上,除非你明确地将它们放在堆上,但对于类来说,这不是问题。

无论如何,如果您有性能问题,要做的第一件事就是分析您的代码。确实有些事情显然比其他事情效率更高或更低,但是在您看到编译器实际执行的操作之前,您通常无法确定,结果通常与您的预期相反。因此,如果您想了解性能,请分析您的代码。

于 2012-08-22T23:51:14.553 回答