使用Indexer for Objects时是否有任何性能提升?

时间:2016-10-21 08:25:51

标签: c# indexer

假设我必须为类flyweight制作三个对象,那么制作像这样的对象有什么区别

flyweight f1=new flyweight();
flyweight f2=new flyweight();
flyweight f3=new flyweight();

并且喜欢这个?

public class flyweight
{
    flyweight[] obj = new flyweight[3];
    public flyweight this[int index]
    {
        get{
            if (index < 3) {
                obj[index] = new flyweight();
            }
            return obj[index];
        }
    }
    public void display() {
        Console.WriteLine("this is a object");
    }
    public void load() {
        flyweight f = new flyweight();
        for (int i = 0; i < 3; i++) {
            f[i].display();
        }
    }
}

当我们使用Indexer创建对象时,是否有任何性能提升?

2 个答案:

答案 0 :(得分:1)

索引属性编译为简单的public flyweight get_Item(int index)方法。调用方法并不比直接访问变量f1f2f3快(尽管我没有证据)。

如果你在这个级别进行优化,没有性能问题的证据,你可能最终会得到一个充满bug的较慢的应用程序,因为你的应用程序布局很乱。

答案 1 :(得分:0)

如果有什么可以使用双重方法,使用实例变量和数组:

var f1 = new flyweight();
var f2 = new flyweight();
var f3 = new flyweight();
var flyweights = new[] { f1, f2, f3 };

如果需要,这允许使用特定实例,并在可能有用的地方迭代所有实例。