Statische Konstruktor & Singleton-Klasse

Habe ich ein Objekt-cache, die implementiert das Singleton design-pattern. Mein Ansatz singleton war immer zu faul, laden Sie die statische Instanz, wenn die Eigenschaft zugegriffen wird.

public static Widget
{
    get
    {
        if(instance==null) instance = new Widget();
        return instance;
    }
}

Weiß ich aber, dass dieser Ansatz ist nicht thread-safe und die Prüfung für die Instanz null stellt eine kleine Ineffizienz. Würde es klug sein, implementieren Sie eine statische Konstruktor für die Klasse, die instanziiert die statische Instanz?

Wie ich es verstehe, wird der statische Konstruktor aufgerufen werden würde, wenn der erste statische Eigenschaft zuzugreifen, tritt auf. Ist diese gültig, und wird es bieten keine Vorteile gegenüber dem derzeitigen lazy load-Ansatz oder wäre es besser zu erforschen, einen proxy-Implementierung, oder verwenden Sie ein Schloss, um ihn zu zwingen werden, um thread-safe?

public static Widget
    {
        get
        {
            if(instance==null)
            {
                lock(padlock)
                {
                    if(instance==null) instance = new Widget();
                }
            }
            return instance;
        }
    }

Habe ich nicht eine ganze Menge Erfahrung mit statischen Konstruktoren, also nicht wollen, um zu springen, um mit dieser Idee, wenn Sie eine gleiche oder schlechtere Umsetzung der lazy load-Eigenschaft.

Cheers,
Gary

InformationsquelleAutor GaryJL | 2009-07-15
Schreibe einen Kommentar