簡體   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