2011-02-02 9 views
5

Fondamentalmente, è meglio memorizzare un valore in una variabile alla prima esecuzione o utilizzare continuamente il valore? Il codice sarà spiegarlo meglio:Leggere un valore più volte o memorizzarlo come prima variabile?

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); 
} 

risposta

4

La chiarezza è importante, e DRY (non ripetere se stessi) è importante. Questa è una micro-astrazione - nascondendo una piccola, ma ancora significativa, funzionalità dietro una variabile. La performance è trascurabile, ma l'impatto positivo della chiarezza non può essere sottovalutato. Utilizzare una variabile ben denominata per conservare il valore una volta acquisito.

+0

Per aggiungere a questo, quando si dispone di un'istruzione separata per l'assegnazione del valore, aiuta il debug in scenari di errore. per esempio. se il valore della variabile non è valido e causa errore/eccezione, puoi controllarlo prima di usarlo da qualche parte. – vamyip

0

la seconda soluzione è meglio per me perché:

  • la consultazione dei dizionari ha un costo
  • è più leggibile

Oppure si può avere un oggetto Singleton con il suo costruttore privato che popola una volta tutti i dati di configurazione necessari.

0

Secondo, sarebbe la scelta migliore.

Immagina questa prossima situazione. Le impostazioni vengono aggiornate da altri thread e durante alcuni di essi, poiché il valore di impostazione non è bloccato, passa a un altro valore.

Nella prima situazione, l'esecuzione può fallire, o verrà eseguita correttamente, ma il codice stava controllando un file con un nome, e successivamente salva qualsiasi cosa in un file che non è quello controllato in precedenza. Questo è troppo male, non è vero?

Un altro vantaggio è che non stai recuperando il valore due volte. Si ottiene una volta e si utilizza ovunque il codice deve leggere l'intera impostazione.

0

Sono sicuro, il secondo è più leggibile. Ma se parli di prestazioni, non ottimizzarlo nelle prime fasi e senza profiler.

0

Devo essere d'accordo con gli altri. La leggibilità e l'ESSICCAZIONE sono importanti e il costo della variabile è molto basso considerando che spesso si hanno solo Oggetti e non si memorizza la cosa più volte.

Ci possono essere eccezioni con oggetti speciali o grandi. Devi tenere presente la domanda se il valore memorizzato nella cache potrebbe cambiare in mezzo e se desideri o meno (la maggior parte delle volte il secondo!) Conoscere il nuovo valore all'interno del tuo codice! Nel tuo esempio, pensa a cosa potrebbe accadere quando ConfigurationManager.AppSettings ["LoggingFile"] cambia tra le due chiamate (a causa della logica accessoria o del thread o sempre leggendo il valore da un file dal disco).

Riprendi: circa il 99% vorrete il secondo metodo/la cache!

0

IMO che dipende da ciò che si sta tentando di memorizzare nella cache. La memorizzazione nella cache di un'impostazione da App.conig potrebbe non essere vantaggiosa (a parte la leggibilità del codice) come memorizzazione nella cache dei risultati di una chiamata al servizio Web tramite una connessione GPRS.

Problemi correlati