Recientemente tuve algunos problemas con una clase de singelton que era perezoso al inicializar un diccionario donde un segundo hilo intentaba usarlo antes de que realmente se hubiera rellenado. Así que implementé la inicialización de la variable a través de la clase Lazy<T>
.¿Está usando Lazy <T> malo para el rendimiento?
Aquí está mi código:
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;
});
que esto esté arreglado el problema y ahora estoy considerando hacer de esto una práctica regular de la mina para utilizar la clase Lazy<T>
en cualquier lugar que hago inicialización lenta para evitar posibles problemas de threads. Entonces, básicamente, me gustaría saber si esta es una buena/práctica común. ¿O será detremental para el rendimiento o algo así?
¿Es una buena práctica usar la clase Lazy? –
@ AlexHopeO'Connor ¡Es por eso que fue agregado! La desventaja de usar la clase es que la declaración del campo/propiedad se vuelve un poco más desordenada (como se puede ver) pero en términos de rendimiento, es sólida. – dlev
Eso es todo lo que necesitaba escuchar, es solo que no he visto muchos ejemplos de él en el código de otras personas. –