2011-02-02 9 views
5

Básicamente, ¿es una mejor práctica almacenar un valor en una variable en la primera ejecución, o utilizar continuamente el valor? El código será explicarlo mejor:¿Lee un valor varias veces o lo almacena como variable la primera vez?

TextWriter tw = null; 
if (!File.Exists(ConfigurationManager.AppSettings["LoggingFile"])) 
{ 
    // ... 
    tw = File.CreateText(ConfigurationManager.AppSettings["LoggingFile"]); 
} 

o

TextWriter tw = null; 
string logFile = ConfigurationManager.AppSettings["LoggingFile"].ToString(); 
if (!File.Exists(logFile)) 
{ 
    // ... 
    tw = File.CreateText(logFile); 
} 

Respuesta

4

La claridad es importante y seco (no repita usted mismo) es importante. Esta es una micro abstracción, que esconde una pequeña, pero aún significativa, funcionalidad detrás de una variable. El rendimiento es insignificante, pero el impacto positivo de la claridad no puede subestimarse. Use una variable bien nombrada para mantener el valor una vez que ha sido adquirido.

+0

Para agregar a esto, cuando tiene una instrucción separada para asignar el valor, ayuda a depurar en escenarios de error. p.ej. si el valor de la variable no es válido y causa un error/excepción, puede verificarlo antes de usarlo en alguna parte. – vamyip

0

la segunda solución es mejor para mí porque:

  • la búsqueda de diccionario tiene un costo
  • que es más fácil de leer

O puede tener un objeto único con su constructor privado que puebla una vez que todos los datos de configuración que necesita.

0

La segunda sería la mejor opción.

Imagine esta próxima situación. Las configuraciones son actualizadas por otros hilos y durante algunos de ellos, dado que el valor de configuración no está bloqueado, cambia a otro valor.

En la primera situación, su ejecución puede fallar, o se ejecutará correctamente, pero el código estaba buscando un archivo de algún nombre, y luego guarda lo que sea para un archivo que no ha sido marcado anteriormente. Esto es muy malo, ¿no?

Otra ventaja es que no está recuperando el valor dos veces. Obtienes una vez y la usas donde sea que tu código necesite para leer toda la configuración.

0

Estoy bastante seguro, el segundo es más legible. Pero si habla de rendimiento, no optimice en etapas tempranas y sin perfilador.

0

Debo estar de acuerdo con los demás. La legibilidad y DRY es importante y el costo de la variable es muy bajo, ya que a menudo tendrá solo objetos y no almacenará la cosa muchas veces.

Puede haber excepciones con objetos especiales o grandes. Debe tener en cuenta la pregunta si el valor que guarda en caché puede cambiar entre medio y si le gustaría o no (¡la mayoría de las veces el segundo!) Conocer el nuevo valor dentro de su código. En su ejemplo, piense qué podría suceder cuando ConfigurationManager.AppSettings ["LoggingFile"] cambia entre las dos llamadas (debido a la lógica de acceso o al hilo o siempre leyendo el valor de un archivo del disco).

Reanudar: ¡Aproximadamente el 99% querrá el segundo método/la memoria caché!

0

IMO que dependería de lo que está intentando almacenar en caché. El almacenamiento en caché de una configuración desde App.conig puede no ser tan beneficioso (aparte de la legibilidad del código) como el almacenamiento en caché de los resultados de una llamada al servicio web a través de una conexión GPRS.

Cuestiones relacionadas