Недавно у меня возникли проблемы с классом singelton, который был ленивым, инициализируя словарь, где второй поток попытается использовать его до того, как он был заполнен. Поэтому я реализовал инициализацию переменных с помощью класса Lazy<T>
.Используется Lazy <T> Плохо для исполнения?
Вот мой код:
private static Dictionary<string, string> GroupDefaults
{
get { return mGroupDefaults.Value; }
}
private static Lazy<Dictionary<string, string>> mGroupDefaults =
new Lazy<Dictionary<string,string>>(delegate
{
Dictionary<string, string> defaults = new Dictionary<string, string>();
foreach (KeyValuePair<string, UnitGroup> groupDef in Groups)
defaults.Add(groupDef.Key, groupDef.Value.First().Key);
return defaults;
});
Эта проблема решена, и теперь я рассматриваю это делаю регулярную практику шахты использовать Lazy<T>
класс в любом месте я ленивые инициализации, чтобы избежать возможных проблем многопоточности. Так что в основном я хотел бы знать, хорошая ли это практика? Или это будет слишком сложно для исполнения или чего-то еще?
Значит, это хорошая практика использования класса Lazy? –
@ AlexHopeO'Connor Вот почему он был добавлен! Недостатком использования класса является то, что объявление поля/свойства становится немного грязнее (как вы можете видеть), но с точки зрения производительности, оно твердое. – dlev
Это все, что мне нужно было услышать, просто я не видел много примеров этого в коде других народов. –