Статический конструктор и класс Singleton

У меня есть кэш объектов, который реализует шаблон проектирования Singleton. Мой подход к синглтону всегда заключался в том, чтобы лениво загружать статический экземпляр при первом обращении к свойству.

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

Однако я знаю, что этот подход не является потокобезопасным, и проверка, например, на нулевое значение, вводит небольшую неэффективность. Было бы разумно реализовать статический конструктор в классе, который создает экземпляр статического экземпляра?

Насколько я понимаю, статический конструктор будет вызываться всякий раз, когда происходит первый доступ к статическому свойству. Является ли это допустимым и даст ли оно какие-либо преимущества по сравнению с текущим подходом с отложенной загрузкой, или было бы лучше исследовать реализацию прокси-сервера или использовать блокировку, чтобы сделать ее безопасной для потоков?

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

У меня нет большого опыта работы со статическими конструкторами, поэтому я не хочу переходить к этой идее, если она является равной или худшей реализацией свойства отложенной загрузки.

Ура, Gary

 Fredrik Mörk15 июл. 2009 г., 16:40
Я верю, что этот вопрос и ответ дадут вам то, что вы хотите:stackoverflow.com/questions/246710/…

Ответы на вопрос(2)

чтобы использовать свой собственный поточный безопасный ленивый инициализатор и, возможно, ошибиться, я рекомендую просто использовать класс ленивого инициализатора Джо Даффи.

http://www.bluebytesoftware.com/blog/PermaLink,guid,a2787ef6-ade6-4818-846a-2b2fd8bb752b.aspx

Решение Вопроса

статья на одиноких, обсуждающих эту проблему.

 22 февр. 2010 г., 05:01
Это хорошо работает и с контейнерами IOC:tavaresstudios.com/Blog/post/…
 17 июн. 2011 г., 11:56
Ссылка должна быть обновлена доcsharpindepth.com/Articles/General/Singleton.aspx

Ваш ответ на вопрос