繁体   English   中英

使用Indexer for Objects可以提高性能吗?

[英]Is there any performance gain when using Indexer for Objects?

假设我必须为一个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创建对象时,性能会有任何提高吗?

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

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

如果可以使用双重方法,可以同时使用实例变量和数组:

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

这允许您在需要时使用特定实例,并在可能有用的情况下遍历所有实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM